更改位图中的像素

时间:2014-03-21 08:47:44

标签: android bitmap pixel

我想动态更改位图的像素,但它不可变,因此返回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());

1 个答案:

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

从不可变位图获取可变位图。