1. 程式人生 > >Android使用byte陣列生成一張灰度圖

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陣列則可以傳送到網路或者別的地方。

如有錯誤,感謝指正,謝謝合作。