Android使用byte陣列生成一張灰度圖
阿新 • • 發佈:2019-02-04
一、在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陣列則可以傳送到網路或者別的地方。
如有錯誤,感謝指正,謝謝合作。