我正在尝试根据十六进制值更改位图的颜色。
在我尝试使用我的颜色选择器中选择的颜色的myBitmap.setPixel之前,我只是试图让它与rgb一起工作:
for (int x = 0; x <= myBitmap.getWidth(); x++) {
for (int y = 0; x <= myBitmap.getHeight(); y++) {
myBitmap.setPixel(x, y, Color.rgb(255, 255, 255));
}
}
如果我只设置一个像素:
bitmapPreview.setPixel(50, 50, Color.rgb(255, 255, 255));
它工作正常,但当我尝试循环遍历位图像素时,它强制关闭应用程序
关于如何进行此项工作的任何建议,或关于如何根据颜色选择器返回的值更改位图颜色的其他建议。从颜色选择器返回的值的格式为:white = -1或蓝色阴影= -15658590
谢谢!
答案 0 :(得分:4)
如果这是您正在使用的确切代码,则您的循环条件是错误的。您在两个维度中超出了位图的限制1个像素,并且您使用了错误的变量来检查其中一个维度。在两个循环中将<=
更改为<
,并将条件中的x
更改为y
:
for (int x = 0; x < myBitmap.getWidth(); x++) {
for (int y = 0; y < myBitmap.getHeight(); y++) {
myBitmap.setPixel(x, y, Color.rgb(255, 255, 255));
}
}
答案 1 :(得分:2)
应用程序强制关闭的原因是您正在执行CPU密集型操作。 您的长时间运行操作应始终在AsyncTask中执行,而不是在应用程序的UI线程上执行。
选项1:
创建一个AsyncTask的Sub类&lt;&gt; class并在doInBackground方法中执行像素操作。这不会强制关闭应用程序
选项2 :(更好地选择位图操作)
使用RenderScript执行此类图形操作。 RenderScript是跨平台的,可以比在java代码中循环更快地执行像素操作。