проблемка с печатью изображения
От: Alexi Россия trancer2000.narod.ru
Дата: 29.06.02 19:35
Оценка:
Хай Ол!
Помогите плз, така проблемка. Есть tif файл, я его просматриваю свободно в TImage. И дело в том, что при печати этого изображения with Printer do
begin
BeginDoc;
Canvas.Draw(500,500,Image1.Picture.Graphic); или Canvas.StretchDraw(image1.BoundsRect, Image1.Picture.Graphic);
EndDoc;

Он у меня печатает его маленьким очень. Вопрос: как увеличить масштаб изображения, причём чтоб картинка увеличилась не меняя пропорциональности. А то если задать в Rect цифры, то он будет картинку либо расширять либо сужать в строгом порядке, а мне надо только увеличить её раза в 2-3.
КАК ЖЕ ЭТО СДЕЛАТЬ МОЖНО, ПОМОГИТЕ РЕБЯТ ПЛЗ, ОЧЕНЬ НУЖНО.
xxx
Re: проблемка с печатью изображения
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.07.02 11:20
Оценка: 3 (1)
Здравствуйте Alexi, Вы писали:

A>Хай Ол!

A>Помогите плз, така проблемка. Есть tif файл, я его просматриваю свободно в TImage. И дело в том, что при печати этого изображения with Printer do
A>begin
A> BeginDoc;
A>Canvas.Draw(500,500,Image1.Picture.Graphic); или Canvas.StretchDraw(image1.BoundsRect, Image1.Picture.Graphic);
A> EndDoc;

A>Он у меня печатает его маленьким очень. Вопрос: как увеличить масштаб изображения, причём чтоб картинка увеличилась не меняя пропорциональности. А то если задать в Rect цифры, то он будет картинку либо расширять либо сужать в строгом порядке, а мне надо только увеличить её раза в 2-3.

A>КАК ЖЕ ЭТО СДЕЛАТЬ МОЖНО, ПОМОГИТЕ РЕБЯТ ПЛЗ, ОЧЕНЬ НУЖНО.
Ну что тебе сказать... У принтера просто пикселы очень маленькие. Для справки: типичное разрещение экрана = 96dpi, типичное разрешение принтера — 600 dpi. Методы канваса работают в натуральных координатах.
Canvas.StretchDraw должен спасти даже предводителя дворянства. Задание Image1.BoundsRect в качестве первого параметра сего метода ни к чему хорошему, ессно, не приведет, т.к. он в точности совпадает с самим собой и картинка будет масштабироваться один к одному. Что нужно сделать:

var 
  R: TRect;
  Scale: double;
begin
  Scale:= 3.1415926; // например. Здеся мы его полагаем константой. 
  // Никому не показывать, иначе отшлепают лотком для подачи бумаги
  R:= Image1.ClientRect;
  R.Right:= Round(R.Right * Scale);
  R.Bottom:= Round(R.Bottom * Scale);
  Canvas.StretchDraw(R, Image1.Picture.Graphic);


Мы получим картинку, растянутую в нужное количество раз. Риск получить по попе лотком для бумаги связан с тем, что у разных принтеров различный DPI. И результаты, естественно, получатся различными, что не может не будить в пользователях родительских инстинктов.
Для борьбы с этим нужно покопать в сторону TPrinter.PageWidth и TPrinter.PageHeight. Эти магические констаны подскажут, какую долю страницы будет занимать картинка. И именно они должны участвовать в подсчете переменной Scale.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: проблемка с печатью изображения
От: Alexi Россия trancer2000.narod.ru
Дата: 01.07.02 19:01
Оценка:
СПАСИБО ТЕБЕ ОГРОМНОЕ SINCLAIR!
xxx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.