2012-06-07 25 views
6

Estoy teniendo actualmente el siguiente problema: Quiero convertir una matriz de bytes que viene de un archivo con la siguiente configuración:matriz de bytes o la matriz de mapa de bits

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. 

Así que lo que quiero hacer es convertirlos bytes en un mapa de bits sin tener que establecer píxel por píxel con bitmap.setPixel porque lleva demasiado tiempo.

¿Alguna sugerencia? ¡Gracias por adelantado!

+0

¿Cómo estás determinó el ancho/alto si todo lo que tiene es una matriz de bytes? ¿Es una matriz bidimensional? ¿Te lo dan de antemano? – vcsjones

+0

¿Has visto esto? http://stackoverflow.com/questions/6782489/create-bitmap-from-byte-array-of-pixel-data La clase de mapa de bits tiene un ctor que usa una matriz de bytes directamente: http://msdn.microsoft.com/en -us/library/zy1a2d14 – kol

+0

Sí, tengo el ancho y el alto de la imagen. En este caso su 1280 x 720. – waclock

Respuesta

11

Si tiene el byte[] de los píxeles, y el ancho y alto, entonces puede usar BitmapData para escribir los bytes en el mapa de bits ya que también conoce el formato. Aquí hay un ejemplo:

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

Esta es una operación muy rápida.

Usted tendrá que importar estos tres espacios de nombres en la parte superior de su archivo de C#, como mínimo:

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

Gracias por su respuesta, traté de usar su código, pero ImageLockMode, PixelFormat y Marshal no son reconocidos. ¿Qué bibliotecas adicionales necesito? – waclock

+0

Necesita agregar algunos 'using's. Ver mi edición – vcsjones

+0

¡Gracias, funcionó perfectamente! – waclock

Cuestiones relacionadas