将图像中的所有黑色设置为另一种颜色(ImageView / Bitmap)

时间:2016-07-18 08:11:24

标签: android graphics bitmap imageview

我正在尝试转换一个位图中的所有黑色像素(从作为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声明...... 我只是试图让这个位图中的所有像素都变红,即使这样也行不通..请帮忙吗?

3 个答案:

答案 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);

然后像上面那样执行像素操作,只需将所有像素设置为相同的颜色。