У меня есть объект Bitmap, созданный путем рисования нескольких элементов управления с помощью метода DrawToBitmap. Теперь я хотел бы распечатать растровое изображение. Однако растровое изображение слишком велико, чтобы поместиться на одной странице, поэтому его необходимо уменьшить. Я пытаюсь сделать это, используя следующую перегрузку DrawImage:
public void PrintPageHandler(object sender, PrintPageEventArgs e)
{
Bitmap bitmap = GetBitmap();
Rectangle destRect = new Rectangle(
e.MarginBounds.X,
e.MarginBounds.Y,
e.MarginBounds.Width,
e.MarginBounds.Width * bitmap.Height / bitmap.Width);
e.Graphics.DrawImage(
bitmap,
destRect,
0,
0,
bitmap.Width,
bitmap.Height,
System.Drawing.GraphicsUnit.Pixel);
}
Обратите внимание, что ширина и высота destRect сконструированы следующим образом, поскольку растровое изображение намного шире, чем высокое (т. Е. Ширина всегда является предельным размером).
Моя проблема в том, что при печати изображение получается очень размытым. Я неправильно масштабирую это? У меня есть чувство, что может быть некоторая проблема с несоответствием GraphicsUnit между e.MarginBounds и размерами изображения. Любая помощь будет оценена.
[UPDATE]
Я попытался изменить размер растрового изображения, используя метод, приведенный в комментарии ниже, но изображение по-прежнему расплывчато. Для тестирования я сохранил исходное изображение и растровое изображение с измененным размером в файлы, открыл их в Windows Photo Viewer и попытался распечатать их оттуда. Изображение с измененным размером расплывается расплывчато, как в моем приложении c #, но оригинальное изображение распечатывается красиво; Какой бы алгоритм Windows Photo Viewer ни использовал для изменения размера одной страницы, изображение не было размытым.
Интересно, может ли Windows Photo Viewer увеличивать плотность пикселей при изменении размера для печати? Может быть, поэтому изменение его размера в коде вызывает размытие; исходная плотность пикселей недостаточна для четкого отображения уменьшенного изображения.