Android使用byte数组生成一张灰度图

来源:互联网 发布:遥感影像匀光匀色软件 编辑:程序博客网 时间:2024/05/22 13:24

一、在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数组则可以发送到网络或者别的地方。

如有错误,感谢指正,谢谢合作。

1 0