|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.06.2021, 15:06 | #1 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Вывод на печать картинки в точках принтера
Бьюсь над простейшей задачей: распечатать картинку товарного знака в точках принтера, или по крайней мере в заданном масштабе в составе этикетки.
Не могу приспособиться: битмап размером 50х50 точек вылезает размером 500х500. Где и почему он масштабируется при печати? Процесс печати: - назначаю размеры страницы (пробовал в разных единицах, у мелкософта вроде как сотые дюйма). - обнуляю отступы на странице. - в событии printDocument1_PrintPage отрисовываю из файла картинку в координатах 0,0. На принтере установлен размер этикетки 50х35 мм. Вылезает на этикетку кусок картинки размером раза в три больше заложенного в картинку. От чего это зависит? У Graphics есть свойство Scale. Но оно почти не влияет на выводимый масштаб картинки. Пробовал менять единицы измерения у Graphics с Display на Pixel. Никакого толку. Есть у кого хороший опыт в этих вещах? Подскажите правильные действия. Я в C# новичек, в основном на C++ работал, но в Win10 это уже архаизм. |
11.06.2021, 08:17 | #2 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
При печати надо выставить параметр страницы в софте. Либо там же параметр чтобы использовал настройку принтера.
Затем в графиксе отмасштабировать вашу картинку. Код:
Да ну.. Это ваше личное мнение??
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 11.06.2021 в 09:22. |
15.06.2021, 21:06 | #3 | ||
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Цитата:
Буду на работе через неделю - проверю это еще раз на принтере. Лет 10 назад делал подобное на С++. Повозился со структурами описания параметров принтера в WinApi, но добился желаемого. Сейчас решил сделать то же на шарфике, и уперся, поскольку опыт был давно, и лезть на низкий уровень тут для меня проблематично, да и неправильно. Цитата:
Последний раз редактировалось AnPis; 15.06.2021 в 21:13. |
||
16.06.2021, 07:56 | #4 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Так а что вы в конечном итоге хотите получить то??
Если рисунок 50*50 пикселей то нужно его перевести в мм с учетом разрешения принтера. Откуда у вас берутся заморочки то на пустом месте? Если у вас dpi к примеру 400 на дюйм то квадратик 50 пикс = 50/400 * 25,4мм = 3,175мм Подставляйте в код который я вам дал и получите что хотите.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
21.06.2021, 08:53 | #5 | |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Спасибо, Мастер, за примерчик: он реально делает правильный вывод на печать. Отдохнул недельку и вот попробовал.
Но: Цитата:
У меня принтер 300 dpi (точка 0,086 мм). Надо картинку ~12х12 мм. Создал картинку "шахматное поле" 100х100 пикселей. При печати получаю 25,6х25,6 мм Т.е. одна печатная точка картинки = 0,1 дюйма (???) И вовсе не в миллиметрах. Но прямоугольник рисуется честно. Последний раз редактировалось AnPis; 21.06.2021 в 12:37. |
|
21.06.2021, 11:32 | #6 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Код:
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
21.06.2021, 13:17 | #7 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Да, рисует, спасибо
Но я сначала скопировал Ваш код с Rectangle. Он принимает целочисленные значения. А у меня печатается баркод из png-файла, сгенеренный консольной программой в формате 108х108 пикселов. И получается приблизительно 9х9 мм. Может плохо читаться из-за округления. Но я покопался в справочнике и нашел перегрузку метода с RectangleF. Буду пробовать. Последний раз редактировалось AnPis; 21.06.2021 в 13:27. |
21.06.2021, 13:40 | #8 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Попутный вопрос:
а в каких единицах получается печатаемый текст? Написал две строки: Код:
Это в каких попугаях он рисует буковки? |
21.06.2021, 13:44 | #9 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
21.06.2021, 14:20 | #10 |
Пользователь
Регистрация: 02.04.2020
Сообщений: 30
|
Потому и вопрос задал: назначил мм в качестве единиц, битмап рисую, указываю мм, и получаю в мм, как и указал. Все замечательно.
В том же контексте /процедуре рисую текст Arial-ом, указываю не знаю в чем 20 единиц, получаю 1/4 от указанного в мм. Я специально цифры вывожу, чтобы от размера буков не зависеть. Ни параметр Height, ни параметр Size фонта не коррелируют с указанной величиной ни в каких единицах. Указанные 20 единиц не транслируются в отпечатанный 5 мм размер буков ни в какой шкале. Это не так принципиально, но хотелось бы понимать эти взаимосвязи. Последний раз редактировалось AnPis; 21.06.2021 в 14:25. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Печать на термо-принтера (чековых принтеров) | slukl | C# (си шарп) | 5 | 22.06.2021 08:30 |
Прямая печать текста на принтер (У принтера отключен спулер и печать идет на прямую на принтер.) | PAG | Visual C++ | 9 | 11.04.2016 16:41 |
Excel. Настройки принтера. Двухсторонняя печать | Bagir | Microsoft Office Excel | 0 | 10.10.2012 00:47 |
Печать Image несколько копий в одной строке, + текст в низу картинки... | Oleg Romanchuk | Общие вопросы Delphi | 0 | 10.11.2011 12:57 |
Работа с Printer. Частичный вывод листа из принтера. | Izhic | Общие вопросы Delphi | 6 | 15.10.2008 08:57 |