Android使用byte数组生成一张灰度图
Posted YQS_Love
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android使用byte数组生成一张灰度图相关的知识,希望对你有一定的参考价值。
一、在Java里,保持一张图片使用byte数组,这样在传送数据到网络时就非常的方便。最近组长要我用一个300*400的byte数组,通过一个线程不断改变里面的值,比如让所有的位置上的值从0~255轮转,然后生产一张灰度图。一开始郁闷,怎么做都是彩色的图片,然后我就无语了,研究许久之后,终于知道怎么生产灰度图了。
二、方法
其实原理很简单,不过说实话,我还是不太明白为啥这么写就是灰度图(能力太差。。。),就不会有彩色了,下面直接上代码,下面个类就是通过byte数组生产一张Bitmap图片。
public class BitmapCreateFactroy
/**
* Use color create a bitmap
*
* @param color byte array
* @param picw
* bitmap width
* @param pich
* bitmap height
* @return Bitmap
*/
public static Bitmap createBitmap(byte[] values, int picW, int picH)
if(values == null || picW <= 0 || picH <= 0)
return null;
//使用8位来保存图片
Bitmap bitmap = Bitmap
.createBitmap(picW, picH, Config.ARGB_8888);
int pixels[] = new int[picW * picH];
for (int i = 0; i < pixels.length; ++i)
//关键代码,生产灰度图
pixels[i] = values[i] * 256 * 256 + values[i] * 256 + values[i] + 0xFF000000;
bitmap.setPixels(pixels, 0, picW, 0, 0, picW, picH);
values = null;
pixels = null;
return bitmap;
这样,你就可以定义一个byte数组,然后将里面的值全部初始化或者动态改变每一位上的值(0~255,不过byte的范围没有这么大,强制转化就可以了),生产一张灰度图片。
传入的图片宽高要和byte数组这个矩阵一样,否则图片会生成失败哦!
例如:byte[] pictures = new byte[300 * 400];
BitmapCreateFactroy.createBitmap(pictures,300,400);
这样就得到了Bitmap图片,就可以用于显示,而byte数组则可以发送到网络或者别的地方。
如有错误,感谢指正,谢谢合作。
以上是关于Android使用byte数组生成一张灰度图的主要内容,如果未能解决你的问题,请参考以下文章
Java BufferImage图片处理(获取宽高图片截取转换灰度图)
C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。
用c#编写一个程序读取一张bmp图片的数据并转化为灰度图保存到文件中