編輯:關於Android編程
本人近期做了一個項目,是關於類似於一個視頻監控,主要的是用了一個開發板,把一幀一幀的圖像數據通過socket傳出來,然後在Android客戶端進行監聽數據;當獲取到數據之後,在imageview上顯示出來,最核心的部分是看了老外的一篇帖子才解決的問題。
帖子是這樣的,老外遇到了和我一樣的問題:大概就是怎麼讓imageview顯示RGB565的圖像,他嘗試了兩種方法,就是下面的代碼部分,當然這兩種方法都不可以!
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
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 Bitmap.Config.RGB_565
bitmap to
contain your image. You must know the height and width of your raw image.
2) create a ByteBuffer
that
is sufficient size to contain all the pixels in the bitmap; each scanline of
the image takes a stride amount of pixels, which may be more than the image's
width. This extra padding on each line is necessary. (Sometimes by happy coincidence the stride is the same as the width - there is no padding; this cannot be relied upon, always do your offsets taking account for stride.)
With ByteBuffers, its important to understand the read and write offsets. After you've written to a ByteBuffer, you flip
it
to read those bytes.
3) read the raw pixels from the file into your ByteBuffer
,
one scanline at a time, with the appropriate stride spacing between lines.
4) use Bitmap.copyPixelsFromBuffer()
.
5) discard the ByteBuffer
和
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
Activity為我們提供一個可進行交互的窗口。當activity類創建了一個窗口,開發人員可以通過setContentView(View)接口把UI放到activity
什麼是root,安卓用戶想要對手機進行刪除系統自帶軟件、修改系統某些設置等高權限操作,就要先進行獲取ROOT權限的操作,當然我們要知道,這個操作可能會失敗的
開發環境為android4.1.Handler使用例1這個例子是最簡單的介紹handler使用的,是將handler綁定到它所建立的線程中.本次實驗完成的功能是:單擊St
在上家干了快2年辭職後在家休息了快一個月了,說實在的不上班的感覺爽(睡覺睡到自然醒,游戲玩到手抽筋)。哈哈,又是快到一年過中秋的時候了,好久沒有更新博客了,今天順便撸一篇