2

我在 ImageView 中有一个图像。我想将某些像素设置为红色。我取得了一些进展,但创建的图像失去了颜色。

 iv.setImageBitmap(processingBitmap(bitmap));

  private Bitmap processingBitmap(Bitmap src){

        Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());

        for(int x = 0; x < src.getWidth(); x++){
         for(int y = 0; y < src.getHeight(); y++){
          int pixelColor = src.getPixel(x, y);
          int newPixel= Color.rgb(pixelColor, pixelColor, pixelColor);
          dest.setPixel(x, y, newPixel);
         }
        }

        for (int i=5; i<50; i++)
        {
        dest.setPixel(i, i, Color.rgb(255, 0, 0));
        }

        return dest;
       }

在此处输入图像描述

如果我使用 Bitmap dest = src.copy(src.getConfig(), src.isMutable());而不是 Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());我得到一个错误的 iv.setImageBitmap(processingBitmap(bitmap));行:

09-06 18:03:37.226:E/AndroidRuntime(811):原因:java.lang.IllegalStateException 09-06 18:03:37.226:E/AndroidRuntime(811):在 android.graphics.Bitmap.setPixel(Bitmap .java:847)

我也不知道为什么我必须复制粘贴所有像素,然后将这些像素设置为我想要的红色。如果我只使用

 for (int i=5; i<50; i++)
        {
        dest.setPixel(i, i, Color.rgb(255, 0, 0));
        }

我得到带有红线的黑色图像。

任何帮助表示赞赏!

4

1 回答 1

1

Color.rgb() 占用 3 个字节,分别为 Red、Green、Blue。您正在尝试为它们中的每一个设置像素颜色。最好尝试这样的事情

byte blue = (byte) ((pixelColor & 0xff));
byte green = (byte) (((pixelColor >> 8) & 0xff));
byte red = (byte) (((pixelColor >> 16) & 0xff));
int newPixel= Color.rgb(red , green , blue);
于 2014-05-31T11:54:54.133 回答