2012-06-07 38 views
6

Tôi hiện đang gặp vấn đề sau: Tôi muốn chuyển đổi một mảng byte mà đến từ một tập tin với các cấu hình sau:Byte mảng hoặc ma trận để bitmap

Byte1: R color of pixel 0,0. 
Byte2: G color of pixel 0,0. 
Byte3: B color of pixel 0,0. 
Byte4: R color of pixel 0,1. 

... 
ByteN: R color of pixel n,n. 

Vì vậy, những gì tôi muốn làm là chuyển đổi các byte thành bitmap mà không phải đặt pixel theo pixel bằng bitmap.setPixel vì quá trình này mất quá nhiều thời gian.

Mọi đề xuất? Cảm ơn trước!

+0

How are you xác định chiều rộng/chiều cao nếu tất cả các bạn có là một mảng byte? Nó là một mảng 2 chiều? Nó được trao cho bạn trước khi bàn tay? – vcsjones

+0

Bạn đã thấy điều này chưa? http://stackoverflow.com/questions/6782489/create-bitmap-from-byte-array-of-pixel-data Lớp bitmap có một ctor sử dụng mảng byte trực tiếp: http://msdn.microsoft.com/en -us/library/zy1a2d14 – kol

+0

Có, tôi có chiều rộng và chiều cao của hình ảnh. Trong trường hợp này, nó là 1280 x 720. – waclock

Trả lời

11

Nếu bạn có byte[] pixel, chiều rộng và chiều cao, thì bạn có thể sử dụng BitmapData để ghi byte vào bitmap vì bạn cũng biết định dạng. Dưới đây là ví dụ:

//Your actual bytes 
byte[] bytes = {255, 0, 0, 0, 0, 255}; 
var width = 2; 
var height = 1; 
//Make sure to clean up resources 
var bitmap = new Bitmap(width, height); 
var data = bitmap.LockBits(new Rectangle(Point.Empty, bitmap.Size), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); 
Marshal.Copy(bytes, 0, data.Scan0, bytes.Length); 
bitmap.UnlockBits(data); 

Đây là một hoạt động rất nhanh.

Bạn sẽ cần phải nhập khẩu ba không gian tên ở phía trên cùng của tập tin # C, ở mức tối thiểu:

using System.Drawing; 
using System.Drawing.Imaging; 
using System.Runtime.InteropServices; 
+0

Cảm ơn bạn đã phản hồi, tôi đã thử sử dụng mã của bạn nhưng ImageLockMode, PixelFormat và Marshal không được nhận dạng. Tôi cần thêm thư viện nào? – waclock

+0

Bạn cần thêm một vài 'sử dụng'. Xem chỉnh sửa của tôi. – vcsjones

+0

Cảm ơn bạn, nó hoạt động hoàn hảo! – waclock

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