Android Bitmap 和 ByteArray的互相轉換

Android Bitmap 和 ByteArray的互相轉換

移動平臺圖像處理,須要將圖像傳給native處理,如何傳遞?將bitmap轉換成一個 byte[] 方便傳遞也方便cpp代碼直接處理圖像內容。java

Bitmap -> byte[]

建立一個ByteBuffer用於接收數據。首先須要爲buffer開闢內存空間,內存空間的大小就是圖片的大小。將bitmap的數據寫入buffer,而後調用buffer的 array() 方法獲得array.android

int bytes = bmp.getByteCount(); ByteBuffer buf = ByteBuffer.allocate(bytes); bmp.copyPixelsToBuffer(buf); byte[] byteArray = buf.array();

byte[] -> Bitmap

這個步驟讓我花費了更多時間。以前看到有人說能夠使用nginx

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length); 

來根據ByteArray直接獲得bitmap,可是我使用中出現問題。想一想其實很簡單,就這麼一行語句,一個bitmap對象必須的參數都沒有設置,怎麼就可能獲得正常的bitmap對象?這個方法生效的前提是,提供的bitmapdata是包含了圖像參數的,而非簡單的RGBA數據。而我如今獲得的僅僅是RGBA數據,因此須要先獲得一個bitmap實例,再往裏填數據。須要將獲得的array再變回buffer,使用buffer的 wrap 方法,包裝數組獲得buffer.數組

// use Bitmap.Config.ARGB_8888 instead of type is OK Bitmap stitchBmp = Bitmap.createBitmap(width, height, type); stitchBmp.copyPixelsFromBuffer(ByteBuffer.wrap(byteArray)); imageView.setImageBitmap(stitchBmp);

參考資料ui

How do I convert raw camera data into a Bitmap on Androidspa

How to convert byte array to Bitmapcode

相關文章
相關標籤/搜索