Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TPrinter и TImage 
:(
    Опции темы
Baa
Дата 14.1.2003, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Проблема такая:
никогда не работал с принтером, а тут понадобилось быстро научиться :) для печати использую TPrinter. Надо распечатать содержимое TImage... Как делаю? копирую канвас Имиджа на канвас Принтера... вот токо одна пробелема... картинка получается мегамаленькой :( Как передать точный размер?
Картинку 160 на 160 он печатает в размере меньше 10 мм... А должен больше 400... в чем проблема?
з.ы. я бы как всегда сам разобрался, но вот листы и картридж сильно ограниченны.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
stab
Дата 14.1.2003, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Все дело в волшебных dpi (точек на дюйм) :) у твоего принтера dpi наверно 600 или более, т.е. получается что картинка на листе занимает примерно пятую часть от дюйма при 600 dpi т.е. менее 10 мм

При рисовании на канве используй метод StretchDraw()
высота и ширина страницы принтера: TPrinter.PageHeight, TPrinter.PageWidth


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Baa
Дата 14.1.2003, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Хорошо, тогда как посчитать увеличение, чтобы было WYSIWYG(т.е. что вижу на мониторе, также и распечатывается)?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
stab
Дата 15.1.2003, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



это смотря в каком разрешении монитора на картинку смотреть: 640x480 - большая картинка, в 1024x768 - маленькая :) Можно условится что твоя форма это лист формата A4, надо что бы пропорция сторон у формы соответствовала пропорции сторон листа A4. Тогда:

(Printer.PageHeight / Form1.Height) * Image1.Height -- это будет высота которую нужно указать в StrechDraw, с шириной так же


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Song
Дата 15.1.2003, 05:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: нет
Всего: 4



Надо брать логические размеры, а не абсолютные. Чтобы их получить, юзаешь GetDeviceCaps()


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
dr.ZmeY
Дата 15.1.2003, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Политолог
****


Профиль
Группа: Участник Клуба
Сообщений: 3892
Регистрация: 26.3.2002
Где: ..::STALINGRAD::. .

Репутация: нет
Всего: 60



Кинь на форму PrinterSetupDialog...
Далее по событию кнопки:

Код

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   Printer.Orientation:=poLandscape;
   if PrinterSetupDialog1.Execute then begin
       with Printer do
       begin
           BeginDoc;
           Canvas.StretchDraw(Rect(200,200,PageWidth-200,PageHeight-200),Image1.Picture.Graphic);
           EndDoc;
       end;
   end;
end;



--------------------
PM MAIL WWW ICQ Skype   Вверх
stab
Дата 15.1.2003, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



To Song: в данном случае логические размеры не помогут, т.к. не известна реальная величина картинки в сантиметрах или дюймах, известны только ее размеры в пикселях.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Baa
Дата 15.1.2003, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



2 Snick_Y2K: я не чайник, честное слово... до подобного кода я и сам дошел... меня интересует, как распечатать картинку WYSIWYG.
Чтобы приложил листок к монитору, и размер совпал.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
stab
Дата 15.1.2003, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Код

 // image size in mm on display
 scrDC := GetDC(0);
 wi := (GetDeviceCaps(scrDC, HORZSIZE) / Screen.Width) * Image1.Width;
 hi := (GetDeviceCaps(scrDC, VERTSIZE) / Screen.Height) * Image1.Height;
 ReleaseDC(0, scrDC);

 // image size in pixels on printer
 wp := Round((Printer.PageWidth / GetDeviceCaps(Printer.Canvas.Handle, HORZSIZE)) * wi);
 hp := Round((Printer.PageHeight / GetDeviceCaps(Printer.Canvas.Handle, VERTSIZE) ) * hi);


проверить уже не могу -- картридж сдох :)


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Baa
Дата 15.1.2003, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



2 Song: ну вот я получил кол-во пикселей на инч (их наерно надо было получить), а дальше-то че с ними делать.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
stab
Дата 15.1.2003, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



пикселей на инч на экране обычно 96, можно задать любое число, это же логические еденицы, это ни чего не даст


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Baa
Дата 15.1.2003, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



2 cully, усе, пасиб, работает %)


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 16.1.2003, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Работает-то работает, токо качество поганое получается из-за стретча :\


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
neutrino
Дата 16.1.2003, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Ваа, я тут постил ответ МММ. Поищи, он то самое и делает. Или спроси у самого МММ.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
neutrino
Дата 16.1.2003, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Посмотрел, оказалось, что мой пример такой же как и тот, что привели. Но, на всякий случай:

procedure TForm1.Button1Click(Sender: TObject);
var
 ScaleX, ScaleY: Integer;
 R: TRect;
begin
 Printer.BeginDoc;
 with Printer do
 try
   ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
   ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
   R := Rect(0, 0, Image1.Picture.Width*ScaleX, Image1.Picture.Height*ScaleY);
   Canvas.StretchDraw(R, Image1.Picture.Graphic);
 finally
   EndDoc;
 end;
end;


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1181 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.