# Bitmap转灰度字节数组byte[]

/*如一张480*800的图片，最终得到一个byte[480*800/2]的灰度数组，因为函数把每两个相邻高的像素灰度转化为一个灰度*/

private byte[] java_convertIMG2GreyArray(Bitmap img) {

byte[] theBytes = null;
/* 得到位图的宽高 */
int width = img.getWidth();
int height = img.getHeight();
/* 取得位图的像素点 */
int[] pixels = new int[width * height];
img.getPixels(pixels, 0, width, 0, 0, width, height);
/* 定义结果数据数组 */
theBytes = new byte[width * height / 2];

/*定义循环中用到的变量，节约内存和时间*/
int x, y, k;
int pixel, r, g, b;
for (y = 0; y < height; y++) {
for (x = 0, k = 0; x < width; x++) {
//依次取得像素点
pixel = pixels[y * width + x];
//得到rgb
r = (pixel >> 16) & 0xFF;
g = (pixel >> 8) & 0xFF;
b = pixel & 0xFF;
/*每两行存为一行*/
if (x % 2 == 1) {
theBytes[k + y * width / 2] = (byte) (theBytes[k + y
* width / 2] | ((r * 299 + g * 587 + b * 114 + 500) / 1000) & 0xf0);
k++;
} else {
theBytes[k + y * width / 2] = (byte) (theBytes[k + y
* width / 2] | (((r * 299 + g * 587 + b * 114 + 500) / 1000) >> 4) & 0x0f);
}
}
}
return theBytes;

}

/*灰度依次转换 如：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);

}
});

}

• 本文已收录于以下专栏：

## Android下常用的图像处理程序(灰度化、线性灰度变化、二值化)

• WheroJ
• 2016年04月06日 16:41
• 3306

## android bitmap 获取像素

android bitmap 获取像素并可以重新创建bitmap Bitmap b = Bitmap.createBitmap(100, 100, Config.ARGB_4444); b.set...
• caobai
• 2015年07月23日 15:08
• 311

## android 计算Bitmap占byte大小，以及Bitmap中像素数的计算，另外再给出一个按尺寸裁剪图片的方法

• hello_tree
• 2013年02月22日 14:29
• 6008

## Android学习之Bitmap对象与字节数组相互转换

1、将Bitmap对象读到字节数组中 [java] view plain copy ByteArrayOutputStream baos = new...
• qq_24531461
• 2017年03月15日 17:53
• 5750

## Hello Android - Bitmap转换为黑白的灰度图和加圆角效果

/** * 处理图片的工具类. * */ public class ImageTools { /***//** * 图片去色,返回灰度图片 * @par...
• luoxiangyu001
• 2012年01月12日 10:08
• 3388

## android byte[]数组，bitmap，drawable之间的相互转换

Byte[]转Bitmap BitmapFactory.decodeByteArray(data, 0, data.length); 复制代码 Bitmap转Byte[] ...
• Yelbosh
• 2012年08月28日 17:12
• 10578

## Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据

• huang546213693
• 2016年09月22日 10:45
• 1222

## C# Bitmap类型与Byte[]类型相互转化

Bitmap   =>   byte[]  Bitmap   b   =   new   Bitmap( "test.bmp "); MemoryStream   ms   =   new ...
• tigertianx
• 2011年12月23日 16:04
• 38798

## Android中Bitmap对象和字节流之间的相互转换

android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte import java.io.Buf...
• itheima6
• 2012年04月27日 10:11
• 18938

## Activity之间传递Bitmap，将Bitmap转换为Byte数组后传递

Activity之间传递数据的大小是有限制的，Bitmap又往往比较大，如果直接传递Bitmap的话总是会出现各种问题，因此需要将Bitmap转换为Byte数组后再传递 转换后发送： ...
• shihui512
• 2016年03月08日 16:01
• 3437

举报原因： 您举报文章：Bitmap转灰度字节数组byte[] 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)