iremezoff
@iremezoff

DrawImage в PrintDocument — вставка изображения на печать, проблемы с масштабированием

Проблема в следующем. При возникновении события печати обрабатываем параметры делегата PrintPageEventHandler, где собственно в одной из переменных хранится объект Graphics (событие PrintPage).
Пытаюсь вставить на полотно любое изображение, а потом собственно просмотреть стандартным контролом предпросмотра. И тут начинаются проблемы. Изображение вставляется, но всё бы ничего, но оно отмасштабировано с каким-то коэффициентом и в результате вставляемое изображение становится размытым как при предпросмотре, так и прип печати, собственно оригинал теряется.
Пробовал у вставляемого изображения менять разрешение (SetResolution) на то, что хранится в объекте Graphics, получаемого от параметра делегата PrintPageEventHandler (у меня было 600dpi). Пробовал менять PageScale на 1 (хотя это дефолтовое значение). Пробовал менять единицы измерения на дюймы (inch) и точки (point).
Много чего пробовал, но всё не получается получить нормальное изображение. В чем могут быть проблемы?
  • Вопрос задан
  • 4051 просмотр
Пригласить эксперта
Ответы на вопрос 1
rasa
@rasa
Недавно решал такой вопрос, так и не понял как лучше сделать. Пока черновой вариант работает так
(правда, все равно чуть режет края). Скопировал часть кода:

 InitializeComponent();
    PrintDocument pd = new PrintDocument();
                string printerU = "PDF Printer";
                pd.PrinterSettings.PrinterName = printerU;
                PageHeight = pd.PrinterSettings.DefaultPageSettings.PaperSize.Height;
                PageWidth = pd.PrinterSettings.DefaultPageSettings.PaperSize.Width;
                pd.PrintPage += new PrintPageEventHandler(PrintImage);

                if (pd.PrinterSettings.IsValid)
                {
                    pd.Print();
                }
                else
                {
                    // Printer is invalid
                }
                pd.Dispose();
            }            
        }

        private void PrintImage(Object sender, PrintPageEventArgs e)
        {
            System.Drawing.Image img =
                          System.Drawing.Image.FromFile("123.bmp");
            e.Graphics.DrawImage(img, 0, 0, PageWidth, PageHeight);
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы