-
Есть объект bmp: TBitmap. В нем содержится изображение примерно 1100 х 900. При отображении картинки на экране (допустим в TImage) все красиво, но при печати качество изображения намного хуже. Разрешение страницы A4 принтера по умолчанию около 7000х5000, dpi = 600. Поэтому при печати на холст принтера я использую код Printer.BeginDoc;
try
Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PageWidth, Printer.PageHeight), bmp);
finally
Printer.EndDoc;
end; Как можно распечатать исходное изображение без кракозябр? То есть гладким, без ухудшения качества печати, вызванным необходимостью проецировать исходное изображение на страницу принтера.
-
GetBrushOrgEx(Canvas.Handle, pt); SetStretchMode(Canvas.Handle, HALFTONE); SetBrushOrgEx(Canvas.Handle, pt.x, pt.y, nil);
-
> Как можно распечатать исходное изображение без кракозябр? > То есть гладким, без ухудшения качества печати
взять изображение соответствующего размера,и напечатать
-
> han_malign (23.01.12 18:20) [1] > GetBrushOrgEx(Canvas.Handle, pt); > SetStretchMode(Canvas.Handle, HALFTONE); > SetBrushOrgEx(Canvas.Handle, pt.x, pt.y, nil);
Поэксперементировал, никаких визуально заметных изменений нет.
> QAZ (23.01.12 18:57) [2] > > взять изображение соответствующего размера,и напечатать
Ох, откуда же я его возьму? Я же написал, что есть исходное изображение 1100х900. Это условие задачи.
-
> Ох, откуда же я его возьму? Я же написал, что есть исходное > изображение 1100х900. Это условие задачи.
перерисуй,найди исходник условие задачи из гна сделать конфетку или че? для кач. печати должно быть 300дпи при нужном размере,все что ниже - плохо, выше - не имеет смысла
-
> QAZ (23.01.12 19:59) [4]
Нельзя ничего перерисовать. Изображение - это входной сигнал. Представь, что это учебная задача.
-
удачи
-
Загрузи картинку в Word и распечатай. Сравни оба варианта. Может, дело не в программе ?
-
> Загрузи картинку в Word и распечатай
чеж не в фотошоп то?
-
мы у себя как то так печатаем...
procedure PrintDIB(ACanvas: TCanvas; const DestRect: TRect; const DIB: TDIB); inline;
var
Pt: TPoint;
begin
GetBrushOrgEx(ACanvas.Handle, Pt);
SetStretchBltMode(ACanvas.Handle, COLORONCOLOR);
SetBrushOrgEx(ACanvas.Handle, Pt.x, Pt.y, @Pt);
StretchDIBits(ACanvas.Handle, DestRect.Left,
DestRect.Top, DestRect.Right - DestRect.Left, DestRect.Bottom - DestRect.Top, 0, 0, DIB.Width, DIB.Height, DIB.PBits, DIB.BitmapInfo^, DIB_RGB_COLORS, SRCCOPY);
end;
-
Используя для отрисовки GDI+, можно добиться неплохого сглаживания при растягивании изображения, если тебя волнует именно этот момент. Хотя, как то попадался и пример (на Delphi) масштабирования битмапа с бикубической интерполяцией...Но у тебя во первых непропорциональное масштабирование производится, во вторых - понизь DPI печати, ато ты ничего хорошего не получишь. Да и маловато разрешение для печати на А4.. многого не ожидай.
-
При отображении картинки на экране (допустим в TImage) все красиво,
Это оптический обман. Вызванный изображением построенным из светящихся точек. При этом глазу достаточно 72-96 дпи и он ничего не заметит.
А на бумаге все сложнее. Точки не светятся, а отражают. И глаз здесь уже не обманешь.
И при 600 dpi получим картинку 1.8 x 1.5 дюйма. И она будет такая же "хорошая " как и на экране.
Так что правильный вопрос - это не как качественно напечатать, а как качественно заапскейлить исходник.
Ответ: при таких размерах исходника - ну никак.
-
>Ответ: при таких размерах исходника - ну никак.
1100 х 900, насколько я помню, достаточно качественно напечатается на A4.
Другое дело, что тут куча влияющих факторов - начиная от кода вывода заканчивая драйверами, качеством самого принтера и бумаги.
-
насколько я знаю, даже 1х1 достаточно качественно напечатается и на A3.
и кучи никакой нет. есть один единственный вопрос - как отмасштабировать рисунок вверх.
-
>насколько я знаю, даже 1х1 достаточно качественно напечатается и на A3.
почему же ты пишешь:
>Ответ: при таких размерах исходника - ну никак.
То 1100х900 не достаточно, то 1х1 - достаточно?
-
> Дмитрий Белькевич (27.01.2012 17:21:14) [14]
1x1 будет качественно даже в виде анаморфа, а вот 1100х900 нет
-
почему же ты пишешь:
потому что сарказм. что 1100 точек, что одна точка - разницы то нет. и то и это будет "достаточно" качественно на а4
|