Rumah >pembangunan bahagian belakang >C++ >Mengapa 'Ralat Generik Berlaku dalam GDI ' Berlaku Apabila Menukar Imej kepada MemoryStream?

Mengapa 'Ralat Generik Berlaku dalam GDI ' Berlaku Apabila Menukar Imej kepada MemoryStream?

Barbara Streisand
Barbara Streisandasal
2025-01-26 15:16:12816semak imbas

Why Does

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn