2010-10-18 39 views
7

Tôi có tệp "Image_RGB565.raw" chứa bộ đệm hình ảnh ở định dạng RGB565. Tôi muốn hình ảnh này được hiển thị trong ImageView. là nó có thể mà không cần thêm mã chuyển đổi sang RGB888?Cách nạp bộ đệm RGB565 vào ImageView

tôi đã cố gắng

 
BitmapFactory.Options opt = new BitmapFactory.Options(); 
opt.inPreferredConfig = Bitmap.Config.RGB_565; 
Bitmap bitmap = BitmapFactory.decodeFile("Image_001_RGB565.raw"); 

nhưng bitmap là null.

sau đó tôi cũng đã cố gắng để tải sử dụng bytearray

 
BitmapFactory.Options opt = new BitmapFactory.Options(); 
opt.inPreferredConfig = Bitmap.Config.RGB_565; 
Bitmap bitmap = BitmapFactory.decodeFile(decodeByteArray(data, 0, data.length, opt); 

hãy hướng dẫn cho tôi để sửa hướng. Kích thước hình ảnh của tôi là 160x160.

Trả lời

6

Đầu tiên là tất cả, bạn nên tránh lưu trữ hoặc chuyển hình ảnh thô sang điện thoại của mình; luôn chuyển đổi chúng sang định dạng nén như PNG hoặc JPG trên máy tính của bạn và triển khai tác phẩm nghệ thuật đó lên thiết bị.

Tuy nhiên, nếu vì một lý do bất thường bạn thực sự muốn tải hình ảnh thô, đây là một cách tiếp cận:

1) tạo ra một Bitmap.Config.RGB_565bitmap để chứa hình ảnh của bạn. Bạn phải biết chiều cao và chiều rộng của hình ảnh thô của bạn.

2) tạo ByteBuffer đủ kích thước để chứa tất cả các pixel trong bitmap; mỗi ảnh chụp quét của hình ảnh có số ảnh sải chân, có thể lớn hơn chiều rộng của hình ảnh. Điều này thêm padding trên mỗi dòng là cần thiết. (Đôi khi do sự trùng hợp hạnh phúc, bước tiến cũng giống như chiều rộng - không có đệm lót; điều này không thể dựa vào, luôn luôn làm bù đắp cho bạn.)

Với ByteBuffers, điều quan trọng là phải hiểu và đọc bù đắp. Sau khi bạn đã viết cho ByteBuffer, bạn flip để đọc các byte đó.

3) đọc các pixel thô từ tệp vào ByteBuffer, một dòng quét tại một thời điểm, với khoảng cách sải chân thích hợp giữa các dòng.

4) sử dụng Bitmap.copyPixelsFromBuffer().

5) loại bỏ các ByteBuffer

+0

Xin chào, tôi có thể hiển thị hình ảnh theo đề xuất của bạn. Cảm ơn rất nhiều. – JRC

+0

@JRC sẵn lòng trợ giúp; đánh dấu câu trả lời như được chấp nhận và cho tôi một số điểm! – Will

+0

Siêu hữu ích. Cảm ơn về thông tin chi tiết! –

2

tôi đã làm nó như thế này, và nó hoạt động.

Bitmap bitmap = Bitmap.createBitmap (captureWidth, captureHeight, Bitmap.Config.RGB_565);

ByteBuffer buffer = ByteBuffer.wrap (dữ liệu);

bitmap.copyPixelsFromBuffer (buffer);

+0

Thans OOO, tôi sẽ thử – JRC

Các vấn đề liên quan