我想动态更改位图的像素,但它不可变,因此返回IllegalStateException。
这是我的代码:
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);
int[] pixels = new int[bm.getWidth()*bm.getHeight()];
bm.getPixels(pixels, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
// ...处理像素...
bm.setPixels(pixels, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
答案 0 :(得分:1)
例如,要将位图的前四行变为蓝色:
import android.graphics.Color;
int[] pixels = new int[myBitmap.getHeight()*myBitmap.getWidth()];
myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
for (int i=0; i<myBitmap.getWidth()*4; i++)
pixels[i] = Color.BLUE;
myBitmap.setPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
您还可以在Bitmap对象中一次设置一个像素的颜色,而无需使用setPixel()方法设置像素缓冲区:
myBitmap.setPixel(x, y, Color.rgb(45, 127, 0));
使用以下方法从资源中获取Mutable Bitmap
public static Bitmap getMutableBitmap(Resources resources,int resId) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
return BitmapFactory.decodeResource(resources, resId, options);
}
或使用
Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
从不可变位图获取可变位图。