Произошла общая ошибка в исключении GDI + при попытке сохранить изображение в MemoryStream - PullRequest
2 голосов
/ 08 октября 2011

Я использую форму окна C #.

Мой код:

private void Openbutton_Click(object sender, EventArgs e)
{
        OpenFileDialog openFileDialog = new OpenFileDialog();
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            SurveyDiagrampictureBox.Image = Bitmap.FromFile(openFileDialog.FileName);

            MemoryStream memoryStream = new MemoryStream();
            SurveyDiagrampictureBox.Image.Save(memoryStream, ImageFormat.Jpeg);
            SurveyDiagram = memoryStream.GetBuffer();
        }
}

Это не всегда происходит, возникает исключение при переходе к этой строке: SurveyDiagrampictureBox.Image.Save(memoryStream, ImageFormat.Jpeg);

Сообщение об исключении:

Произошло необработанное исключение типа 'System.Runtime.InteropServices.ExternalException' в System.Drawing.dll

Дополнительная информация: Общая ошибка произошла вGDI +.

1 Ответ

1 голос
/ 05 марта 2013

GDI + Битовые карты не являются поточно-ориентированными, поэтому часто эти ошибки возникают из-за доступа к изображению в нескольких потоках.Кажется, что это может происходить здесь (например, PictureBox отображает изображение и изображение, сохраняемое в потоке обработчика нажатий кнопок).

Как насчет назначения растрового изображения PictureBox после завершения операций сохранения?

private void Openbutton_Click(object sender, EventArgs e)
{
        OpenFileDialog openFileDialog = new OpenFileDialog();
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            Image img = Bitmap.FromFile(openFileDialog.FileName);

            MemoryStream memoryStream = new MemoryStream();
            img.Save(memoryStream, ImageFormat.Jpeg);
            SurveyDiagram = memoryStream.GetBuffer();

            SurveyDiagrampictureBox.Image = img;
        }
}
...