Рассмотрите следующий код, запущенный в службе Windows.gdi + общая ошибка при рисовании изображения на объекте Graphics
Graphics g = Graphics.FromImage(printImage);
for (int rows = 1; rows <= thumbRows; rows++) {
for (int cols = 1; cols <= thumbColumns; cols++) {
using (Image thumbImage = new Bitmap(resourceQueue.Peek()))
{
g.DrawImage(thumbImage, targetRect, sourceRect, GraphicsUnit.Pixel);
resourceQueue.Dequeue();
if (resourceQueue.Count == 0) break;
}
}
}
Код рисует список изображений после их уменьшения на другое изображение. Он отлично работает в большинстве случаев, но иногда исключение выбрасывается в середине цикла на изображении thumbImage = new Bitmap. Исключением является «Общая ошибка, произошедшая в GDI +». Это всегда происходит после создания 13-го изображения независимо от того, какие изображения используются.
После поиска в Google кажется, что это общая проблема при сохранении файлов, но разница в том, что файл не сохраняется. Изображение нарисовано на объекте Graphics.
Кто-нибудь знает, как это исправить?
Мы не можем видеть код с ошибкой, он находится в коде, который создал растровое изображение, прежде чем он попал в очередь. С хорошими шансами, что, поскольку вы осторожны с использованием * using *, возможно, что-то вроде удаления потока памяти. Он бомбит, когда менеджер памяти изображений должен окунаться в исходные данные пикселя для рендеринга изображения. –
resourceQueue - это очередь строк, содержащих пути к изображениям, на которых она не хранит изображения. thumbImage можно безопасно удалять после правильного рисования объекта Graphics? – Laurijssen
Я не догадывался в этой очереди, содержащей строки. Не знаю, почему 13 - неудачное число. Сегодня пятница. –