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
Lepaskan: 2025-01-26 15:16:12
asal
853 orang telah melayarinya

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:

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;
}
Salin selepas log masuk

MemoryStream m dilupuskan sebelum img digunakan, membawa kepada ralat GDI.

Penyelesaiannya mudah: pastikan strim terbuka sehingga imej diproses sepenuhnya. Inilah kod yang diperbetulkan:

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;
}
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan