Здравствуйте 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.
СПАСИБО ТЕБЕ ОГРОМНОЕ SINCLAIR!