android顯示RGB565資料影象
本人近期做了一個專案,是關於類似於一個視訊監控,主要的是用了一個開發板,把一幀一幀的影象資料通過socket傳出來,然後在Android客戶端進行監聽資料;當獲取到資料之後,在imageview上顯示出來,最核心的部分是看了老外的一篇帖子才解決的問題。
帖子是這樣的,老外遇到了和我一樣的問題:大概就是怎麼讓imageview顯示RGB565的影象,他嘗試了兩種方法,就是下面的程式碼部分,當然這兩種方法都不可以!
6 3 |
I have file "Image_RGB565.raw" which contains image buffer in RGB565 format. I want this image to be displayed in ImageView. is it possible without extra code of converting to RGB888? I have tried to BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; Bitmap bitmap = BitmapFactory.decodeFile("Image_001_RGB565.raw"); but bitmap is null. then i also tried to load using bytearray BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; Bitmap bitmap = BitmapFactory.decodeFile(decodeByteArray(data, 0, data.length, opt); |
最終出現了兩個ANSWERS
6 |
First of all, you should avoid storing or transferring raw images to your phone; its always better to convert them to a compressed format such as PNG or JPG on your PC, and deploy that artwork to the device. However, if for some unusual reason you really want to load raw images, here is an approach: 1) create an 2) create a With ByteBuffers, its important to understand the read and write offsets. After you've written to a ByteBuffer, you 3) read the raw pixels from the file into your 4) use 5) discard the |
和
2 |
I did it like this, and it works. Bitmap bitmap = Bitmap.createBitmap(captureWidth, captureHeight, Bitmap.Config.RGB_565); ByteBuffer buffer = ByteBuffer.wrap(data); bitmap.copyPixelsFromBuffer(buffer); 當然解決問題的就是第二種方法,先建立一個rgb565格式的bitmap物件,然後建立一個位元組buffer,用它的wrap方法封裝,然後把畫素資料從裡面拷貝出來;這就是核心實現部分,當然你們要做的就是怎麼獲取到一幀的RGB565的位元組資料。 |
貼出原帖地址:http://stackoverflow.com/questions/3956770/how-to-load-rgb565-buffer-to-imageview
另一個好的帖子:http://www.iteye.com/problems/79561