【发布时间】:2014-05-09 00:37:18
【问题描述】:
我有一个代码,可以使用以下代码将灰色位图转换为黑白位图:
// scan through all pixels
for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
// get pixel color
pixel = bitmap.getPixel(x, y);
A = Color.alpha(pixel);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
int gray = (int) (0.2989 * R + 0.5870 * G + 0.1140 * B);
// use 128 as threshold, above -> white, below -> black
if (gray > 128)
gray = 255;
else
gray = 0;
// set new pixel color to output bitmap
bmOut.setPixel(x, y, Color.argb(A, gray, gray, gray));
}
}
如您所见,我遍历原始位图的所有像素点,然后将颜色的分量与给定阈值(在本例中为 128)进行比较,然后如果高于我说它是白色的,否则它将是黑色像素。
我现在想做的是一个Spinner,可以改变那个阈值,然后BW图像就会不一样。
为此,我需要重新绘制所有图像,这非常耗费 CPU 时间,再次遍历所有像素需要时间。
有什么方法可以实时使用不同的 BW 阈值更改图像?
有人告诉我使用 GIF,然后我会做什么,只是更改 GIF 的查找表值,有人知道 Android 上的这件事吗?
【问题讨论】:
-
DarkLink,为什么在您的实例中 CPU 时间成本很高?这是因为您在屏幕上绘制位图吗?
-
只是为了引诱你对我进行幽默,我非常有信心你不需要 GL 或 OpenCV 来做到这一点!但我不想猜测——在某些情况下您可能需要这些工具!最好的。
-
我不明白汤姆,你需要知道什么?是的,这段代码耗费了 CPU 时间,在将所有像素设置为黑白后,我在屏幕上显示位图。
-
这就是我需要确认的。您能否将代码准确地发布在屏幕上(例如
canvas.drawBitmap(bitmap, 0, 0, paint...)等...?非常感谢。 -
多线程怎么样?
标签: android image image-processing bitmap threshold