Полная ошибка - System.Runtime.InteropServices.ExternalException: «Произошла общая ошибка в GDI +.» - PullRequest
0 голосов
/ 20 июня 2019

Я написал быстрое приложение winform, которое может принимать введенный текст, генерировать изображения на основе всех системных шрифтов, а затем объединять эти изображения в одно изображение, чтобы привести примеры шрифтов. Для простоты я разделил две функции: одну для генерации изображений и другую для их консолидации, чтобы я мог удалить ненужные шрифты в одном изображении. Все это работало вчера, но теперь, когда дело доходит до сохранения консолидированного изображения ("complete.save (" consolidated.png ");), это дает бесполезную ошибку GDI +. Я проверил пути и доступ, все в порядке и правильно Ничто не блокирует изображение, так что я в полном недоумении, как причина этого. Любые идеи? Код ниже

StringBuilder sb = new StringBuilder();

        List<string> files = FileSystemUtilities.ListFiles("fonts");

        int height = 0;
        int width = 0;

        Bitmap test = new Bitmap(1000, 1000);
        Graphics gTest = Graphics.FromImage(test);

        Font font = new Font("Arial", 128);

        int numWidth = 0;

        int count = 1;

        foreach (var file in files)
        {
            sb.AppendFormat("{0}\r", FileSystemUtilities.GetFileName(file).Replace(".png", string.Empty));

            Bitmap bitmap = new Bitmap(file);

            height = height + bitmap.Height + 10;

            if (width < bitmap.Width)
            {
                width = bitmap.Width;
            }

            SizeF numSize = gTest.MeasureString(Convert.ToString(count), font);

            if (numWidth < numSize.Width)
            {
                numWidth = Convert.ToInt32(numSize.Width + 1);
            }

            bitmap.Dispose();

            count++;
        }

        test.Dispose();
        gTest.Dispose();

        numWidth = numWidth + 10;
        count = 1;
        Bitmap complete = new Bitmap(width + numWidth, height);
        Graphics g = Graphics.FromImage(complete);

        g.FillRectangle(Brushes.White, 0, 0, complete.Width, complete.Height);

        int y = 0;
        foreach (var file in files)
        {
            Bitmap bitmap = new Bitmap(file);

            g.DrawString(Convert.ToString(count) + ".", font, Brushes.Black, 0, y);

            g.DrawImage(bitmap, numWidth, y);

            y = y + bitmap.Height + 10;

            bitmap.Dispose();

            count++;
        }

        string filename = "consolidated.png";

        if (File.Exists(filename))
        {
            File.Delete(filename);
        }

        g.Dispose();
        complete.Save("consolidated.png");
        complete.Dispose();

        TextFileUtilities.WriteTextFile("consolidated.txt", sb.ToString());

1 Ответ

0 голосов
/ 20 июня 2019

Оказывается, это было из-за чрезмерной высоты ... Я не мог видеть это. Спасибо за все, что прокомментировали и помогли мне.

...