工作中遇到图片转灰度数组的需要,经过研究和大神的指导,最终得到如下两个方法,可以实现位图转灰度数组
简单的位图转灰度数组就是:得到位图中的每个像素点,然后根据像素点得到RGB值,最后对RGB值,根据灰度算法得到灰度值即可
/*如一张480*800的图片,最终得到一个byte[480*800/2]的灰度数组,因为函数把每两个相邻高的像素灰度转化为一个灰度*/
private byte[] java_convertIMG2GreyArray(Bitmap img) {
byte[] theBytes = null;}
/*灰度依次转换 如:480 * 800最后得到一个byte[480*800]的灰度数组*/
private void java_convertIMGtoGreyArray(Bitmap img) {
boolean usedebug = true;
if (debugImage == null || debugUihandler == null)
usedebug = false;
int width = img.getWidth(); // 获取位图的宽
int height = img.getHeight(); // 获取位图的高
theBytes = null;
theBytes = new byte[width * height];
int[] pixels = new int[width * height]; // 通过位图的大小创建像素点数组
img.getPixels(pixels, 0, width, 0, 0, width, height);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int colorAtPixel = pixels[width * i + j];
int alpha = (colorAtPixel >> 24) & 0xFF;
int red = (colorAtPixel >> 16) & 0xFF;
int green = (colorAtPixel >> 8) & 0xFF;
int blue = colorAtPixel & 0xFF;
theBytes[width * i + j] = (byte) ((red + green + blue) / 3);
int theb = (0xff & theBytes[width * i + j]);
pixels[width * i + j] = alpha << 24 | theb << 16 | theb << 8
| theb;
}
}
bmo = img;
bmo.setPixels(pixels, 0, width, 0, 0, width, height);
pixels = null;
if (debugUihandler != null)
debugUihandler.post(new Runnable() {
@Override
public void run() {
if (debugImage != null && bmo != null)
debugImage.setImageBitmap(bmo);
}
});
}