|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Печать разноразмерных jpg
Просьба о помощи с печатью фото ... Задача такова: несколько разноразмерных jpg фото (но все одного формата 3:4) надо распечатать на одном листе определенного формата, так чтобы фото имели один и тотже размер (3Х4 см)....
|
#2
|
|||
|
|||
Тебе надо:
1. Понять как работать с объектом TPrinter. 2. Найти на сайте CodeGear процку подготовки картинки к печати. Она там преобразуется в DIB для корректной печати. сам налетал на это дело - печатаешь несколько картинок, какие-то печатаются, какие-то - нет. Если все в DIB'е, то, вроде, все нормально печатается. 3. Ну и дальше немного математики. Т.к. разрешение принтера заведомо очень большое, то тебе все-равно придется увеличивать картинки. Т.е. алгоритм такой. Вычисляем положение и размеры отпечатка, исходя из разрешения принтера, далее делаем Bitmap и отрисовываем на нем нужную нам картинку с масштабированием. Далее преобразуем этот битмап в DIB п это DIB выводим на канву принтера (Printer.Canvas). После того, как сформировали страницу целиком, отсылаем ее на принтер. |
#3
|
|||
|
|||
В принципе понял...
А можно ли сделать так: - На форму загрузить (при загрузке отмаштабировать) эти фотки и работать далее уже с TImage? - написать координатный ini-fale для избежания последующих компиляций связанных с перемещением объектов по странице... |
#4
|
|||
|
|||
с DIB не работал ...
короче для одной фотки делал так {320X240 -это истинный размер фото} {Image2.Width := Trunc(Image2.Width * AspectRatio); Image2.Height := Trunc(Image2.Height * AspectRatio); } OutputWidth := Image2.Width; OutputHeight := Image2.Height; // cooтношение ширины к высоте ~ 0,75 AspectRatio := OutputWidth / OutputHeight; {необходимо привести к размеру 40Х30 мм} //-------------------------------------- OutputHeight := StrToInt(Main.IniFilePrnt.ReadString('KK43','Ratio X', '100')); //-------------------------------------- FX := StrToInt(Main.IniFilePrnt.ReadString('KK43', 'Foto_X', '0')); FY := StrToInt(Main.IniFilePrnt.ReadString('KK43', 'Foto_Y', '0')); // собственно печать фотки Printer.Canvas.StretchDraw(Rect(FX, FY, Trunc(FX + OutputHeight), Trunc(FY + OutputHeight*AspectRatio)), Image2.Picture.Graphic); //Printer.Canvas.Draw(FX, FY, Image2.Picture.Bitmap); |