关于Bitmap像素颜色的判断

android.graphics.Bitmap.Config是一个枚举类型,里面定义了位图的四种格式。通过名称可以大概判处出颜色的存储方式:

  • ALPHA_8:由一个字节表示的图像,是一种8位的位图
  • ARGB_4444:由两个字节来表示的图像,是一种16位的位图
  • ARGB_8888:由四个字节来表示的图像,是一种32位的位图
  • RGB_565:由两个字节来表示的图像,是一种16位的位图


ALPHA_8,ARGB_4444,ARGB_8888都是透明的位图,也就是字母A代表的透明,各个颜色说占的字节推断如下:

  • ALPHA_8:只有一种透明单色表示,占8bit
  • ARGB_4444:四色表示,即A/R/G/B,4+4+4+4=16,表示每一种颜色占4bit
  • ARGB_8888:四色表示,即A/R/G/B,8+8+8+8=32,表示每一种颜色占8bit
  • RGB_565:三色表示,即R/G/B,5+6+5=16,三种颜色分别占5bit,6bit,5bit


可以通过getPixel(x, y)来获取Bitmap位图指定坐标的像素值,该函数的返回值是一个int型,常见的返回值常量有:

public static final int BLACK
Constant Value: -16777216 (0xff000000)
 
public static final int BLUE
Constant Value: -16776961 (0xff0000ff)
 
public static final int CYAN
Constant Value: -16711681 (0xff00ffff)
 
public static final int DKGRAY
Constant Value: -12303292 (0xff444444)
 
public static final int GRAY
Constant Value: -7829368 (0xff888888)
 
public static final int GREEN
Constant Value: -16711936 (0xff00ff00)
 
public static final int LTGRAY
Constant Value: -3355444 (0xffcccccc)
 
public static final int MAGENTA
Constant Value: -65281 (0xffff00ff)
 
public static final int RED
Constant Value: -65536 (0xffff0000)
 
public static final int TRANSPARENT
Constant Value: 0 (0x00000000)
 
public static final int WHITE
Constant Value: -1 (0xffffffff)
 
public static final int YELLOW
Constant Value: -256 (0xffffff00)

因此可以通过getPixel(x, y) == -1 来判断该像素是否为白色。

如果要取出某一单色的值,则可以:

int clr=  bitmap.getPixel(x, y); 
int red = (clr & 0x00ff0000) >> 16; //取高两位
int green = (clr & 0x0000ff00) >> 8; //取中两位
int blue = clr & 0x000000ff; //取低两位

反过来也可以自己设置某个像素的颜色:

for (int i=0; i < pixels.length; i++) {
int alpha = Color.alpha(pixels[i]);
if (alpha != 0) {
pixels[i] = Color.argb(alpha, red, green, blue);
}
}

然后就可以通过setPixel()函数进行设置了。

关于像素设置,还可以浏览这里:stackoverflow.com/questions/4251027/fast...ad-of-pixel-by-pixel

原文地址:https://www.cnblogs.com/wzc0066/p/2948176.html