Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Printer.Canvas и заливка кистью


Автор: DemoCode 29.5.2006, 14:47
При рисовании на канве принтера, он полностью игнорирует стиль кисти.
В частности bsBDiagonal воспринимает как bsSolid.
Как можно это исправить? 

Автор: Snowy 29.5.2006, 14:54
Подготовить документ на битмапе, а потом скопировать на канву принтера. 

Автор: DemoCode 29.5.2006, 14:57
Цитата(Snowy @  29.5.2006,  15:54 Найти цитируемый пост)
Подготовить документ на битмапе, а потом скопировать на канву принтера. 


И так пробовал. При попытке создать битмап размерами Printer.PageHeight и Printer.PageWidth программа вылетает с ошибкой "Недостаточно памяти для выполнения операции". 

Автор: skyboy 29.5.2006, 15:02
DemoCode, часом там в момент обращения(в смысле - PageHeight и PageWidth) не -1 хранится?  

Автор: Snowy 29.5.2006, 15:03
Создай битмап удобного для себя размера, а на принтер копируй его через StretchDraw. 

Автор: DemoCode 29.5.2006, 15:06
Цитата(Snowy @  29.5.2006,  16:03 Найти цитируемый пост)
Создай битмап удобного для себя размера, а на принтер копируй его через StretchDraw.  


Вот с этим большие проблемы. Именно это и был первый вариант. Мне надо печатать чертежи. При копировании StretchDraw или StretchDIBits происходит увеличение и всё портится (особенно эллипсы, окружности и т.д.) - появляется некрасивая пикселизация. А при рисовании сразу на канве принтера все ровненько и красиво, но стили кисти не воспринимаются  smile 


Цитата(skyboy @  29.5.2006,  16:02 Найти цитируемый пост)
DemoCode, часом там в момент обращения(в смысле - PageHeight и PageWidth) не -1 хранится?   


нет 

Автор: Snowy 29.5.2006, 15:21
Цитата(DemoCode @  29.5.2006,  15:06 Найти цитируемый пост)
Вот с этим большие проблемы. Именно это и был первый вариант. Мне надо печатать чертежи. При копировании StretchDraw или StretchDIBits происходит увеличение и всё портится
Так ты определись, какого качества тебе будет достаточно.
Например лист A4 разрешение 300dpi будет 2480x3508 пикселей.
С таким разрешением портиться ничего не будет.

Добавлено @ 15:22 
Кстати, а чему у тебя равны  PageHeight и PageWidth? 

Автор: DemoCode 29.5.2006, 15:26
Цитата(Snowy @  29.5.2006,  16:21 Найти цитируемый пост)
Кстати, а чему у тебя равны  PageHeight и PageWidth?  


Зависит от принтера:
от 4800 и 6826
до 8600 и 10840

Цитата(Snowy @  29.5.2006,  16:21 Найти цитируемый пост)
Например лист A4 разрешение 300dpi будет 2480x3508 пикселей.
С таким разрешением портиться ничего не будет.

Попробую. 

Автор: DemoCode 29.5.2006, 16:02
Цитата(Snowy @  29.5.2006,  16:21 Найти цитируемый пост)
Например лист A4 разрешение 300dpi будет 2480x3508 пикселей.
С таким разрешением портиться ничего не будет.


Всё отлично получилось.
Хотя стиль кисти из-за увеличения превращался в bsSolid, но это не страшно, в качестве кисти использовал битмап большого разрешения.

Snowy, и что бы я без тебя делал? Спасибо.

PS: Так и осталось непонятно почему канва принтера не воспринимает стили кисти и даже если её битмапом задать. 

Автор: Mechanic 29.5.2006, 20:25
А может быть потому, что принтер шибко умный попался. То есть, он на входе имеет PostScript данные, которые рендерит своими силами. Но силенки не шибко рассчитывает.
Обычно таких шибко вумных прикручивают с помощью настройки на EMF (или как там они сейчас называются), на чисто растровые данные. Пущай, как старый, тупой, но добрый матричник, точка за точкой, рисует то, что ему велено, но не то, как он это понимает.. smile 

Автор: Snowy 30.5.2006, 08:46
Скорее дело в слишком мелкой точке, что делает неразличимым пробел в один пихель.
Битмап не масштабирован, поэтому тоже мелкий.
Поэтому картинку лучше именно подготовить, чтобы она одинаково выглядела на всех принтерах, а не так, что на одном сетка крупнее, на другом мельче, на третем вообще неразличима. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)