Hier ist mein Code zum Serialisieren, Deserialisieren und Speichern eines Bildes im Dateisystem. Ich habe mir viele Beispiele für Serialisierung/Deserialisierung angeschaut und möchte nur ein paar Rückmeldungen erhalten, da ich sicher bin, dass mein Code verbessert werden kann. Jede Rückmeldung wird sehr geschätzt. Ich weiß, dass dies ein häufiges Problem ist, und hoffentlich wird diese Frage in Zukunft eine gute Ressource für andere sein.Feedback zu Code zum Serialisieren, Deserialisieren und Speichern von Bildern
Dies ist der überarbeitete Code mit Empfehlungen:
private void Form1_Load(object sender, EventArgs e)
{
RunTest();
}
private void RunTest()
{
byte[] jpgba = ConvertFileToByteArray("D:\\Images\\Image01.jpg");
using (Image jpgimg = ConvertByteArrayToImage(jpgba))
{
SaveImageToFileSystem(jpgimg, "D:\\Images\\Image01_Copy.jpg");
}
byte[] pngba = ConvertFileToByteArray("D:\\Images\\Image02.png");
using (Image pngimg = ConvertByteArrayToImage(pngba))
{
SaveImageToFileSystem(pngimg, "D:\\Images\\Image02_Copy.png");
}
byte[] gifba = ConvertFileToByteArray("D:\\Images\\Image03.gif");
using (Image gifimg = ConvertByteArrayToImage(gifba))
{
SaveImageToFileSystem(gifimg, "D:\\Images\\Image03_Copy.gif");
}
MessageBox.Show("Test Complete");
this.Close();
}
private static byte[] ConvertFileToByteArray(String FilePath)
{
return File.ReadAllBytes(FilePath);
}
private static Image ConvertByteArrayToImage(byte[] ImageByteArray)
{
using (MemoryStream ms = new MemoryStream(ImageByteArray))
{
return Image.FromStream(ms);
}
}
private static void SaveImageToFileSystem(Image ImageObject, string FilePath)
{
// ImageObject.Save(FilePath, ImageObject.RawFormat);
// This method only works with .png files.
// This method works with .jpg, .png and .gif
// Need to copy image before saving.
using (Image img = new Bitmap(ImageObject.Width, ImageObject.Height))
{
using (Graphics tg = Graphics.FromImage(img))
{
tg.DrawImage(ImageObject, 0, 0);
}
img.Save(FilePath, img.RawFormat);
}
return;
}
meine größte Empfehlung wäre, das "using" -Muster zu verwenden. –
Danke allen! Mit dem Stellen dieser Frage habe ich erkannt, wie wichtig es ist, Code unter Kollegen zu diskutieren und zu teilen. Ich muss viel lernen und die Community hinter dieser Seite war eine fantastische Ressource. Ich habe jetzt ein paar ernsthafte Re-Factoring zu tun! – Tim