Масштабирование и печать растрового объекта - PullRequest
1 голос
/ 09 декабря 2011

У меня есть объект 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 увеличивать плотность пикселей при изменении размера для печати? Может быть, поэтому изменение его размера в коде вызывает размытие; исходная плотность пикселей недостаточна для четкого отображения уменьшенного изображения.

1 Ответ

0 голосов
/ 09 декабря 2011

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

В основном:
1 - Рассчитайте соотношение сторон.
2 - найдите наибольшее измерение целевого размера.
3 - измените размер выходных данных так, чтобы самые большие измерения совпадали, и установите меньшее измерение на большее, умноженное на отношение.

РЕДАКТИРОВАТЬ
Проверьте свойства graphics.dpiX и .DpiY, чтобы увидеть, имеет ли ваш принтер другой DPI, идущий горизонтально и вертикально.Если они отличаются, вам придется применить некоторые дополнительные корректировки к размерам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...