Rumah >pembangunan bahagian belakang >C++ >Mengapa Menyimpan JPEG ke MemoryStream dalam GDI Membuang 'Ralat Generik' Melainkan Strim Kekal Terbuka?
GDI JPEG ke Ralat Penukaran MemoryStream: Perangkap biasa
Artikel ini menangani "kesilapan GDI generik" yang sering dihadapi apabila menyimpan imej JPEG ke menggunakan GDI. Walaupun PNG mungkin berfungsi dengan sempurna, JPEG sering mencetuskan pengecualian ini. MemoryStream
Masalahnya: kesilapan, "kesilapan GDI generik yang mengecewakan, berlaku semasa operasi JPEG menyelamatkan ke .
MemoryStream
Isu ini terletak pada pengurusan kitaran hayat . Aliran mesti dibuka sepanjang keseluruhan pemprosesan imej, termasuk operasi . MemoryStream
Save
Kunci adalah untuk mengekalkan keadaan terbuka . Inilah coretan kod yang diperbetulkan:
MemoryStream
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); // Save to MemoryStream // Create a new Image from the MemoryStream (optional, depending on your needs) using (var img = Image.FromStream(m)) { img.Save("C:\test.jpg"); // Save to file (optional) var bytes = PhotoEditor.ConvertImageToByteArray(img); //Convert to byte array (optional) return img; // Return the Image object } }</code>dibuka di dalam blok
sehingga objek MemoryStream
tidak lagi diperlukan, sumber yang diperlukan tetap dapat diakses, menghalang kesilapan. using
Image
Alasan yang tepat tidak jelas, tetapi kemungkinan objek mengekalkan rujukan dalaman kepada asal . Menutup aliran sebelum ini membatalkan rujukan ini, yang membawa kepada ralat GDI semasa operasi Image
. MemoryStream
Save
Isu ini juga mungkin muncul apabila menggunakan sambungan seperti GDIPLUSX.
MemoryStream
Untuk kaedah yang kembali Image
baru dari data yang disimpan. ResizingFirstOrDefault
Image
Atas ialah kandungan terperinci Mengapa Menyimpan JPEG ke MemoryStream dalam GDI Membuang 'Ralat Generik' Melainkan Strim Kekal Terbuka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!