2012-06-07 7 views
6

ich zur Zeit folgendes Problem habe: Ich habe eine Byte-Array konvertieren möchten, die mit der folgenden Konfiguration aus einer Datei kommt:Byte-Array oder Matrix 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. 

Also, was ich tun möchte, diese ist zu konvertieren Bytes in eine Bitmap, ohne Pixel mit bitmap.setPixel Pixel setzen zu müssen, weil es zu lange dauert.

Irgendwelche Vorschläge? Danke im Voraus!

+0

Wie bestimmt man die Breite/Höhe, wenn alles, was Sie haben ein Byte-Array ist? Ist es ein zweidimensionales Array? Wird es dir vorher gegeben? – vcsjones

+0

Haben Sie das gesehen? http://stackoverflow.com/questions/6782489/create-bitmap-from-byte-array-of-pixel-data Bitmap-Klasse hat eine Ctor, die ein Byte-Array direkt verwendet: http://msdn.microsoft.com/en -us/library/zy1a2d14 – kol

+0

Ja, ich habe die Breite und Höhe des Bildes. In diesem Fall seine 1280 x 720. – waclock

Antwort

11

Wenn Sie die byte[] der Pixel haben, und die Breite und Höhe, dann können Sie verwenden, um die Bytes in die Bitmap zu schreiben, da Sie auch das Format kennen. Hier ein Beispiel:

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

Dies ist ein sehr schneller Vorgang.

Sie müssen diese drei Namensräume an der Spitze Ihrer C# Datei importieren, auf Minimum:

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

Vielen Dank für Ihre Antwort. Ich habe versucht, Ihren Code zu verwenden, aber ImageLockMode, PixelFormat und Marshal werden nicht erkannt. Welche zusätzlichen Bibliotheken benötige ich? – waclock

+0

Sie müssen ein paar 'Using's hinzufügen. Siehe meine Bearbeitung. – vcsjones

+0

Danke, es hat perfekt funktioniert! – waclock