2012-06-07 11 views
6

Attualmente sto avendo il seguente problema: voglio convertire un array di byte che viene da un file con la seguente configurazione:Byte array o matrice per 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. 

Quindi quello che voglio fare è convertirli byte in una bitmap senza dover impostare pixel per pixel con bitmap.setPixel perché impiega troppo tempo.

Qualche suggerimento? Grazie in anticipo!

+0

Come stai determinata la larghezza/altezza se hai a disposizione solo un array di byte? È un array bidimensionale? Ti è stato dato in mano? – vcsjones

+0

Hai visto questo? http://stackoverflow.com/questions/6782489/create-bitmap-from-byte-array-of-pixel-data La classe bitmap ha un ctor che utilizza direttamente un array di byte: http://msdn.microsoft.com/en -us/library/zy1a2d14 – kol

+0

Sì, ho la larghezza e l'altezza dell'immagine. In questo caso la sua 1280 x 720. – waclock

risposta

11

Se si dispone dello byte[] pixel, della larghezza e dell'altezza, è possibile utilizzare per scrivere i bit nella bitmap poiché si conosce anche il formato. Ecco un esempio:

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

Questa è un'operazione molto veloce.

Sarà necessario importare questi tre spazi dei nomi nella parte superiore del file C#, come minimo:

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

Grazie per la tua risposta, ho provato a utilizzare il tuo codice ma ImageLockMode, PixelFormat e Marshal non sono riconosciuti. Di quali librerie extra ho bisogno? – waclock

+0

È necessario aggiungere alcuni 'using's. Vedi la mia modifica. – vcsjones

+0

Grazie, ha funzionato perfettamente! – waclock