获取像素的方法
/**
* 获得图片像素数组的方法
* @param bitmap 传入的bitmap值
*/
public static ArrayList<Integer> getPicturePixel(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// 保存所有的像素的数组,图片宽×高
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
ArrayList<Integer> rgb = new ArrayList<>();
for (int i = 0; i < pixels.length; i++) {
int clr = pixels[i];
int red = (clr & 0x00ff0000) >> 16; // 取高两位
int green = (clr & 0x0000ff00) >> 8; // 取中两位
int blue = clr & 0x000000ff; // 取低两位
int color = Color.rgb(red, green, blue);
//除去白色和黑色
if (color!=Color.WHITE && color!=Color.BLACK){
rgb.add(color);
}
}
return rgb;
}
打印不同像素所拥有的数量
public void testPicturePixel(Bitmap bitmap) {
ArrayList<Integer> picturePixel = getPicturePixel(bitmap);
//计数相同颜色数量并保存
HashMap<Integer, Integer> color2 = new HashMap<>();
for (Integer color : picturePixel) {
if (color2.containsKey(color)) {
Integer integer = color2.get(color);
integer++;
color2.remove(color);
color2.put(color, integer);
} else {
color2.put(color, 1);
}
}
for (Integer o : color2.keySet()) {
Log.i("像素键值对", "key=" + o + " value=" + color2.get(o));
}
}
效果如图所示