我正在尝试转换一个位图中的所有黑色像素(从作为PNG文件的ImageView创建)。 我在很多方面都尝试过,但我仍然无法成功。 请帮帮我,我试着连续3天...... 我的代码的一个小例子:
headSkin.buildDrawingCache();
final Bitmap bmp = headSkin.getDrawingCache();
int w = bmp.getWidth();
int h = bmp.getHeight();
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
int color = bmp.getPixel(x, y);
// Shift your alpha component value to the red component's.
bmp.setPixel(x, y, Color.RED);
}
}
正如你所看到的......我甚至没有陈述IF声明...... 我只是试图让这个位图中的所有像素都变红,即使这样也行不通..请帮忙吗?
答案 0 :(得分:1)
我在这里看到2个问题,
首先,你的内存中有这个Bitmap对象,你将黑色像素更改为红色,但是你怎么知道它是否被改变了?您应该将ImageView设置为此位图以查看结果(或将其保存到文件等)。
其次,使用getPixels和setPixels,getPixels将为您提供1维数组,它类似于1.row,2.row,3.row等。而setPixels也接受1维数组。此功能比逐个更改像素快得多。
答案 1 :(得分:0)
@Anil
嗨伙计,刚尝试过,我无法使用它&#39;因为IndexOutOfBound异常......
headSkin.buildDrawingCache();
bmp = headSkin.getDrawingCache();
int [] allpixels = new int [bmp.getHeight()*bmp.getWidth()];
bmp.getPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight());
for(int i = 0; i < allpixels.length; i++)
{
if(allpixels[i] == Color.BLACK)
{
allpixels[i] = Color.RED;
}
}
bmp.setPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight());
headSkin.setImageBitmap(bmp);
这里有什么问题?
编辑:在运行时尝试现在,而不是调试,它甚至没有向我显示错误或其他东西..它只是在整个位图中产生大约1-2个单像素红色答案 2 :(得分:0)
headSkin.buildDrawingCache();
final Bitmap bmp = headSkin.getDrawingCache();
我认为你在这些方面存在问题。其余的代码看起来很好。 可能位图未初始化,因此您只有一个Bitmap引用,而不是内部数据的Bitmap对象。
您可以从代码中删除位图部分并初始化Bitmap,如下所示:
Bitmap myBitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.RGB8888);
然后像上面那样执行像素操作,只需将所有像素设置为相同的颜色。