Общая ошибка возникает в GDI + в Bitmap.Save () после использования SaveFileDialog - PullRequest
26 голосов
/ 28 апреля 2011

Я использую следующий блок кода с дополнительным кодом внутри блока using:

using (System.Drawing.Bitmap tempImg =
       (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap))
{
    // ...
    tempImg.Save("..\\..\\testdata\\tempImg.bmp", ImageFormat.Bmp);                            
    // ...
}

Но я все еще получаю ошибку:

Произошла общая ошибка при GDI +

только после того, как я выполню какое-либо действие, которое не связано с кодом внутри блока using. В других случаях это работает хорошо. Также tempImg.bmp является временным файлом, поэтому я удаляю tempImg.bmp внутри самого блока using.

Так как tempImg находится внутри использования, и он расположен, я думаю, что проблема блокировки должна быть решена.

Может кто-нибудь сообщить мне, в чем заключается ошибка в этом коде?

Edit: System.Drawing.Image до System.Drawing.Bitmap как тип tempImg.

Edit: Я обнаружил, что получаю эту ошибку только после создания SaveFileDialog и нажатия пользователем кнопки «Сохранить».

Ответы [ 12 ]

0 голосов
/ 30 июня 2013

Я пытаюсь сохранить изображение из ресурса, и это также выдает мне ошибку GDI, когда я напрямую использую метод Bitmap.Save (filepath). Я думаю, что мы можем использовать тот же код ниже для любого другого растрового изображения, клонируя его.

Private void SaveResourceImage() {
    object resBmpObject = Resource.Image1.Clone();//Bitmap Image from resource file
    //object resBmpObject = anyBmpImage.clone(); //for image other than resource image
    Bitmap resBmpImage = (Bitmap)resBmpObject;
    resBmpImage.Save(destFilePath, System.Drawing.Imaging.ImageFormat.Png);
    resBmpImage.dispose();
}
0 голосов
/ 28 апреля 2011

Это пример кода с форумов Microsoft.

// new image with transparent Alpha layer
using (var bitmap = new Bitmap(330, 18, PixelFormat.Format32bppArgb))
{
    using (var graphics = Graphics.FromImage(bitmap))
    {
        // add some anti-aliasing
        graphics.SmoothingMode = SmoothingMode.AntiAlias;

        using (var font = new Font("Arial", 14.0f, GraphicsUnit.Pixel))
        {
            using (var brush = new SolidBrush(Color.White))
            {
                // draw it
                graphics.DrawString(user.Email, font, brush, 0, 0);
            }
        }
    }

    // setup the response
    Response.Clear();
    Response.ContentType = "image/png";
    Response.BufferOutput = true;

    // write it to the output stream
    bitmap.Save(Response.OutputStream, ImageFormat.Png);
    Response.Flush();
}
...