ich eine Menge von Fragen und Antworten lesen, die meisten vorschlagen:Zeigen Sie ein Byte-Array in einer PictureBox in C#
byte[] byteArray; //(contains image data)
MemoryStream stream = new MemoryStream(byteArray);
Bitmap image = new Bitmap(stream);
pictureBox.Image = image;
oder mehr direkt:
pictureBox.Image = Image.FromStream(stream);
ich immer: "Eine nicht behandelte Ausnahme vom Typ 'System.ArgumentException' in System.Drawing.dll aufgetreten
Zusätzliche Informationen: Parameter ist nicht gültig. "
in Bezug auf den Stream-Parameter.
Selbst in dem Fall, dass:
byte[] byteArray = new byte[1];
byteArray[0] = 255;
ich kann nicht herausfinden, warum.
EDIT:
ich die Daten aus einer Datei wie folgt erhalten:
//byteArray is defined as List<byte> byteArray = new List<byte>();
TextReader tr = new StreamReader(file);
string File = tr.ReadToEnd();
string[] bits = File.Split('\t');
List<string> image = new List<string>(bits);
height = int.Parse(bits[0]);
width = int.Parse(bits[1]);
image.RemoveRange(0, 2);
image.RemoveAt(image.Count - 1);
foreach (string s in image)
{
byteArray.Add(byte.Parse(s));
}
return byteArray //(i do .ToArray() in the MemoryStream call);
Im Debugger, ich sehe also, dass der byteArray in Ordnung ist, count = 2244, überall Werte usw.
EDIT # 2: Beispieldatendatei (erstes Byte [0] ist in der Höhe, zweiter Byte [1] Breite ist, ist Rest RGB-Daten)
47 15 12 55 25 52 55 25 52 55 25 52 55 25 52 55
25 52 55 25 52 55 25 52 55 25 52 55 25 52 55 25
52 55 25 52 55 25 52 55 25 52 55 25 52 55 25 52
55 25 52 55 25 52 55 25 52 55 25 52 55 25 52 55
25 52 51 24 82 49 24 82 49 24 92 50 25 12 50 24
92 48 24 92 50 24 82 50 25 02 50 24 92 50 25 02
51 25 12 50 24 92 49 25 02 50 25 02 49 25 12 49
25 02 49 25 02 47 25 12 47 25 22 50 24 82 47 24
82 50 24 72 50 24 82 49 24 82 50 24 72 50 24 82
50 24 72 49 24 82 49 25 22 52 24 92 50 24 82 50
24 72 47 25 00 etc.
EDIT # 3: LÖSUNG
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
IntPtr ptr = bmpData.Scan0;
Marshal.Copy(byteArray, 0, ptr, height * width * 3);
bmp.UnlockBits(bmpData);
pictureBox.Image = bmp;
Need 4 Byte-Ausrichtung zu überprüfen, so Ladefunktion ist jetzt:
TextReader tr = new StreamReader(file);
string File = tr.ReadToEnd();
string[] bits = File.Split('\t');
List<string> image = new List<string>(bits);
height = int.Parse(bits[0]);
width = int.Parse(bits[1]);
int falseBits = 0;
int oldWidth = width;
while (width % 4 != 0)
{
width++;
falseBits++;
}
int size = height * width * 3;
byte[] byteArray = new byte[size];
Parallel.For(0, size - 1, i => byteArray[i] = 255);
int index = 0;
int lineIndex = 0;
image.RemoveRange(0, 2);
image.RemoveAt(image.Count - 1);
foreach (string s in image)
{
byteArray [index] = byte.Parse(s);
byteArray [index + 1] = byteArray [index];
byteArray [index + 2] = byteArray [index];
index +=3;
lineIndex++;
if (lineIndex == oldWidth)
{
lineIndex = 0;
index += 3*falseBits;
}
}
return byteArray ;
Welches Format hat das Bild im Bytearray? und das letzte Beispiel wird nie funktionieren ... kann nicht an ein Ein-Byte-Bild denken :) – scartag
Die Daten von Byte [] sind dann nicht wohlgeformt. – leppie
Das letzte Beispiel ist nur zu sagen, dass der Stream nicht funktioniert, auch wenn ich weiß, dass die Daten gut geformt sind, wie leppie es setzte, ich werde bearbeiten und ein Beispiel für die Daten schreiben, die ich habe – Smash