Android 更改位图时出现非法状态异常

Android 更改位图时出现非法状态异常,android,bitmap,imageview,Android,Bitmap,Imageview,我试图更改位图,但是当我调用这些函数时,我在bmp.setPixel(I,j,Color.rgb(红,绿,蓝))行中得到一个非法状态异常 该方法改变像素的完整代码如下: Bitmap darken(Bitmap bmp) { for (int i = 0; i < bmp.getWidth(); i++) { for (int j = 0; j < bmp.getHeight(); j++) { int red = (bmp.getPi

我试图更改位图,但是当我调用这些函数时,我在
bmp.setPixel(I,j,Color.rgb(红,绿,蓝))行中得到一个非法状态异常

该方法改变像素的完整代码如下:

Bitmap darken(Bitmap bmp) {
    for (int i = 0; i < bmp.getWidth(); i++) {
        for (int j = 0; j < bmp.getHeight(); j++) {
            int red = (bmp.getPixel(i, j) >> 16) & 0xFF;
            int green = (bmp.getPixel(i, j) >> 8) & 0xFF;
            int blue = (bmp.getPixel(i, j) >> 0) & 0xFF;
            red -= 25.5;
            green -= 25.5;
            blue -= 25.5;
            if (red < 0) {
                red = 0;
            }
            if (green < 0) {
                green = 0;
            }
            if (blue < 0) {
                blue = 0;
            }
            bmp.setPixel(i, j, Color.rgb(red, green, blue));
        }
    }
    return bmp;
}
这是我按下按钮时运行的方法:

final Button darkenButton = (Button) findViewById(R.id.darkenButton);
    darkenButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            BitmapDrawable bDraw = (BitmapDrawable) imageView.getDrawable();
            Bitmap bmap = bDraw.getBitmap();
            bmap = darken(bmap);
            imageView.setImageBitmap(bmap);
        }
    });

我认为从存储的图像设置位图会导致某种问题,因为如果我通过拍照设置位图,它会起作用。

位图对象是不可变的。您需要将其转换为可变位图或从给定对象创建新的可变位图。查看这个链接@RaghuTeja就是这样。非常感谢!位图对象是不可变的。您需要将其转换为可变位图或从给定对象创建新的可变位图。查看这个链接@RaghuTeja就是这样。非常感谢!
final Button darkenButton = (Button) findViewById(R.id.darkenButton);
    darkenButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            BitmapDrawable bDraw = (BitmapDrawable) imageView.getDrawable();
            Bitmap bmap = bDraw.getBitmap();
            bmap = darken(bmap);
            imageView.setImageBitmap(bmap);
        }
    });