Android Bitmap 和 ByteArray的互相轉換


Android Bitmap 和 ByteArray的互相轉換

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

Bitmap -> byte[]

創建一個ByteBuffer用於接收數據。首先需要爲buffer開辟內存空間,內存空間的大小就是圖片的大小。將bitmap的數據寫入buffer,然后調用buffer的 array() 方法得到array.

        int bytes = bmp.getByteCount();

        ByteBuffer buf = ByteBuffer.allocate(bytes);
        bmp.copyPixelsToBuffer(buf);

        byte[] byteArray = buf.array();

byte[] -> Bitmap

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

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);

參考資料

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

How to convert byte array to Bitmap


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM