Kann jemand vorschlagen, wie ich ein Bild in ein Byte-Array konvertieren kann und umgekehrt?
Ich entwickle eine WPF-Anwendung und verwende einen Stream-Reader.
Beispielcode zum Ändern eines Bildes in ein Byte-Array
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms,imageIn.RawFormat);
return ms.ToArray();
}
}
C # Image to Byte Array und Byte Array to Image Converter Klasse
System.Drawing.Imaging.ImageFormat.Gif
können Sie verwendenimageIn.RawFormat
ImageConverter
unten stehende Lösung scheint diese Fehler zu vermeiden.(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);
.Zum Konvertieren eines Bildobjekts in
byte[]
können Sie wie folgt vorgehen:quelle
.ConvertTo(new Bitmap(x), typeof(byte[]));
.Eine andere Möglichkeit, das Byte-Array vom Bildpfad abzurufen, ist
quelle
Folgendes verwende ich derzeit. Einige der anderen Techniken, die ich ausprobiert habe, waren nicht optimal, da sie die Bittiefe der Pixel (24-Bit gegenüber 32-Bit) geändert oder die Bildauflösung (dpi) ignoriert haben.
Bild-zu-Byte-Array:
Byte-Array zu Bild:
Bearbeiten: Um das Bild aus einer JPG- oder PNG-Datei zu erhalten, sollten Sie die Datei mit File.ReadAllBytes () in ein Byte-Array einlesen:
Dadurch werden Probleme im Zusammenhang mit Bitmap vermieden, bei denen der Quelldatenstrom geöffnet bleiben soll, und es werden einige Problemumgehungen für dieses Problem vorgeschlagen, die dazu führen, dass die Quelldatei gesperrt bleibt.
quelle
ImageConverter _imageConverter = new ImageConverter(); lock(SourceImage) { return (byte[])_imageConverter.ConvertTo(SourceImage, typeof(byte[])); }
wo es zeitweise zu Arrays von 2 verschiedenen Größen führen würde. Dies würde normalerweise nach ungefähr 100 Iterationen passieren, aber wenn ich die Bitmap mit erhaltenew Bitmap(SourceFileName);
und sie dann durch diesen Code laufen lasse, funktioniert sie einwandfrei.Versuche dies:
quelle
MemoryStream
schneller verwendeten Speicher zumindest in der aktuellen Implementierung nicht schneller. Wenn Sie es schließen, können Sie es anschließend nicht mehr verwenden. EsImage
wird ein GDI-Fehler angezeigt.Mit der
File.ReadAllBytes()
Methode können Sie jede Datei in ein Byte-Array einlesen. Verwenden Sie einfach dieFile.WriteAllBytes()
Methode, um ein Byte-Array in eine Datei zu schreiben .Hoffe das hilft.
Weitere Informationen und Beispielcode finden Sie hier .
quelle
Möchten Sie nur die Pixel oder das gesamte Bild (einschließlich der Überschriften) als Byte-Array?
Für Pixel: Verwenden Sie die
CopyPixels
Methode in Bitmap. Etwas wie:quelle
Code:
quelle
Wenn Sie nicht auf die imageBytes verweisen, um Bytes im Stream zu übertragen, gibt die Methode nichts zurück. Stellen Sie sicher, dass Sie auf imageBytes = m.ToArray () verweisen.
[NB] Wenn Sie das Bild im Browser immer noch nicht sehen, habe ich einen detaillierten Schritt zur Fehlerbehebung geschrieben
gelöst! -iis-nicht-dienen-CSS, -Bilder-und-Javascript
quelle
Dies ist ein Code zum Konvertieren des Bilds eines beliebigen Typs (z. B. PNG, JPG, JPEG) in ein Byte-Array
quelle
Um das Bild in ein Byte-Array zu konvertieren. Der Code ist unten angegeben.
Um das Byte-Array
A Generic error occurred in GDI+
in Image zu konvertieren. Der Code ist unten angegeben. Der Code wird in Image Save behandelt.quelle
Dieser Code ruft die ersten 100 Zeilen aus der Tabelle in SQLSERVER 2012 ab und speichert ein Bild pro Zeile als Datei auf der lokalen Festplatte
quelle