【问题标题】:Change pixels in bitmap更改位图中的像素
【发布时间】:2014-03-21 08:47:43
【问题描述】:

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

【问题讨论】:

标签: android bitmap pixel


【解决方案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));

使用以下方法从资源中获取可变位图

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

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

【讨论】:

  • 是否可以改变位图像素的大小?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2011-01-17
  • 2012-06-05
相关资源
最近更新 更多