Rumah >pembangunan bahagian belakang >C++ >Mengapa 'Ralat Generik Berlaku dalam GDI ' Berlaku Apabila Menukar Imej kepada MemoryStream?
GDI "Ralat Generik" Semasa Menyimpan Imej ke MemoryStream: Penyelesaian
Menukar imej JPG atau GIF kepada MemoryStream
menggunakan GDI kadangkala menimbulkan pengecualian "Ralat Generik Berlaku dalam GDI" yang samar. Ini biasanya berlaku semasa image.Save()
. Punca utama selalunya adalah MemoryStream
yang tertutup sebelum waktunya.
Kuncinya adalah untuk memastikan MemoryStream
kekal terbuka sepanjang proses penjimatan imej. Imej dicipta dari strim dan menyimpan memerlukan akses berterusan.
Pertimbangkan coretan kod bermasalah ini:
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); var img = Image.FromStream(m); // MemoryStream 'm' is closed here! img.Save("C:\test.jpg"); // This often fails. return img; }</code>
MemoryStream
m
dilupuskan sebelum img
digunakan, membawa kepada ralat GDI.
Penyelesaiannya mudah: pastikan strim terbuka sehingga imej diproses sepenuhnya. Inilah kod yang diperbetulkan:
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); m.Seek(0, SeekOrigin.Begin); // Rewind the stream var img = Image.FromStream(m); img.Save("C:\test.jpg"); // This should now work. return img; }</code>
Dengan menggunakan m.Seek(0, SeekOrigin.Begin)
, kami menetapkan semula kedudukan strim ke permulaan, membenarkan Image.FromStream
mengakses data imej yang disimpan. Pernyataan using
memastikan pelupusan yang betul MemoryStream
selepas imej berjaya diproses dan dikembalikan. Ini menghalang kebocoran sumber dan menyelesaikan "Ralat Generik" dalam GDI .
Atas ialah kandungan terperinci Mengapa 'Ralat Generik Berlaku dalam GDI ' Berlaku Apabila Menukar Imej kepada MemoryStream?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!