我后来正在使用纹身应用程序,因为我需要将图像(从相机拍摄或从图库中选择)转换为纹身......
我的要求如下
I found a sample code from github
https://github.com/DrewDahlman/ImageFilter/tree/master/Android/project
它用于图像过滤..
我不知道将图像转换为纹身的正确过程是否正确
如果有人知道 Android 上的这个纹身,请建议我,我用谷歌搜索了很多
提前致谢..
你需要一个差异过滤器:
1)计算水平差异(这里有垂直线段)
2)计算垂直差异(此处为水平线段)
3)对两张地图进行“或”运算,找到轮廓
4) 重新创建 Bitmap 对象(如果您愿意)
类似(已编辑):
int[] pixels;
int width = yourbitmap.getWidth();
int height = yourbitmap.getHeight();
yourbitmap.getPixels(pixels, 0, width, 0, 0, width, height);
// transform grayscale
int[] image = new int[width*height];
for (int y=0; y<height; y++)
for (int x=0; x<width; x++)
{
int pixel = image[y*width + x];
image[y*width + x] = (Color.red(pixel) + Color.green(pixel) + Color.blue(pixel))/3;
}
// calculate diff_x (vertical segments)
int[] dx = new int[width*height];
for (int y=0; y<height; y++)
for (int x=0; x<width; x++)
dx[y*width + x] = (x==0 || y== 0 ? 0 : Math.abs(image[y*width + x] - image[y*width + x-1]));
// calculate diff_y (horizontal segments)
int[] dy = new int[width*height];
for (int y=0; y<height; y++)
for (int x=0; x<width; x++)
dy[y*width + x] = (x==0 || y== 0 ? 0 : Math.abs(image[y*width+x] - image[(y-1)*width+x]));
// when the color intensity is higher than THRESHOLD, accept segment
// you'll want a slider to change THRESHOLD values
bool[] result = new bool[width*height];
const int THRESHOLD = 60; // adjust this value
for (int y=0; y<height; y++)
for (int x=0; x<width; x++)
result[y*width + x] = (dx[y*width + x] > THRESHOLD || dy[y*width + x] > THRESHOLD);
Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
for (int y=0; y<height; y++)
for (int x=0; x<width; x++)
result.setPixel(x, y, result[y*width+x]? Color.Black : Color.White);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)