2012-09-06 71 views
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; 
     } 

enter image description here

如果我使用的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):at android.graphics.Bitmap.setPixel(Bitmap.java:847)

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

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

我得到一个红色的黑色图像。

任何帮助表示赞赏!

+0

任何任何想法? – erdomester

回答

1

Color.rgb()需要3个字节为红色,绿色,蓝色。你正在设置每个像素的颜色。 更好地尝试这样的事

byte blue = (byte) ((pixelColor & 0xff)); 
byte green = (byte) (((pixelColor >> 8) & 0xff)); 
byte red = (byte) (((pixelColor >> 16) & 0xff)); 
int newPixel= Color.rgb(red , green , blue); 
相关问题