|
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 4
|
||||||||||||||||
Как повысить качество печати текста с pictureBox18.01.2018, 11:28. Показов 3450. Ответов 20
Метки нет (Все метки)
При отправке на печать на принтер изображения из pictureBox в котором нарисован текст нарисованный через drawstring получается очень низкое качество печати. (рисую на bitmap). Как повысить качество печати текста.
Добавлено через 2 часа 47 минут Код который рисует на pictureBox
0
|
||||||||||||||||
| 18.01.2018, 11:28 | |
|
Ответы с готовыми решениями:
20
Плохое качество печати - грязное дублирование текста Как убрать разводы фонового изображения и повысить качество изображения ? Каким методом лучше повысить качество трафика? |
|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|
| 19.01.2018, 04:26 | |
|
iElladan, Охохо... Ответ лежит на поверхности, и довольно очевиден, если хоть немного подумать. Что отвечает за качество картинки? - Её разрешение. Чем больше размеры картинки, тем выше её качество будет, в том числе, и при печати. А вы, при рисовании, создаёте картинку размером с ваш PictureBox. Какие у него размеры? Попробуйте нарисовать в паинте картинку таких же размеров, и вывести на печать - результат, я полагаю, будет таким же.
Во всяком случае, это то, что сразу бросается в глаза, при текущих предоставленных данных. Может быть у вас PictureBox размером в 2 экрана, и скроллируется по форме. Во всяком случае, советы, для того варианта, который я назвал первым: 1) Поставить PictureBox.SizeMode = StretchImage; - это чтобы картинка большего, чем у самого пикчебокса размера отображалась верно. Ну, или любой другой сайзмод, по выбору. 2) При работе использовать глобальный Bitmap, с нормальными размерами (не меньше 1000 пикселей в ширину, лучше - 2000, больше уже особо смысла не будет), в который и пойдёт рисование, и при изменениях просто переприсваивать PB.Image; 3) Ту ересь ,что у вас написана в printDocument1_PrintPage я вообще воспринимать нормально отказываюсь - по какой причине вы отрисовываете в картинку весь PictureBox, вместо того, чтобы отрисовать его Image, я понять не могу. Просто берёте глобальный Bitmap, из прошлого шага, и выводите на печать через e.Graphics.DrawImage(myBitmap1, 0, 0);
1
|
|
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 05.03.2023, 00:27 | |
|
Старая тема но ответ не получен. Собсно в подобной ситуации оказалось что bitmap содержит картинку отличного качества. Но после вот этого преобразования: e.Graphics.DrawImage(myBitmap1, 0, 0); и печати картинка получается ухудшенного качества. Причем любой принтер можно использовать и вывод в документ , всеравно гдето тут качество картинки успевает ухудшиться. Выглядит картинка так будто ее сжимали какимто жипегом. Вот так:
0
|
|
|
sleep
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,769
|
|
| 05.03.2023, 00:45 | |
|
0
|
|
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||||||
| 05.03.2023, 01:07 | ||||||
|
Пробовал не помогло.
Видно что разрешения хватает но изображение расплылось. Там заметна характерная размывка от сжатия. Я думал что оно расплывается в ходе преобразования цветного изображения в растр но при печати в Microsoft XPS Document Writer рисунок сохраняется тоже расплычатый хоть и цветной. вот:
0
|
||||||
|
sleep
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,769
|
||||||||
| 05.03.2023, 06:16 | ||||||||
|
Сталкивался уже с этим. Из-за этого размытия ручной сканер не читал мелкие распечатанные штрих-коды. Добавлено через 11 минут
1
|
||||||||
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 06.03.2023, 00:44 | |
|
Я попробовал постваить как вы написали строчку устанавливающую dpi 300 на 300.
изображение разпечаталось махонькое, размерм со спичечный коробок. Но всётаки вы дали мне отличную идею куда копать. Я поставил dpi 100 на 100 и изображение стало гораздо четче. Шаг в право шаг в лево и изображение становится отвратительным. 96 dpi очень похоже на то что печатается по дефолту а 105 dpi начинают пропадать пикселы на буквах. Я честно говоря нифига не понял зачем вообще bitmap имеет такой параметр как dpi. По идее главное это разрешение в пикселях а дальше уже вопрос масштабирования . DPI это по сути не масштабирование а рекомендация того какого размера печатать изображение. Сам же алгоритм того как будет масштабироваться изображения и переводится в черно белый растр неизвестен. А ведь их много и они очень разный результат дают.
0
|
|
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 06.03.2023, 01:27 | |
|
Собственно решил я углубиться дальше в тему.
На данной стадии мы имеем что с dpi 100x100 в принципе шрифты становятся приемлемого качества. Штрихкоды нарисованные с помощью графики линиями на канве выглядят вообще идеально. Тоесть графа при печати будет ок. Смущает только то что нет чёткого понимания как в точности значение DPI связано с тем что мы получаем на принтере. А вдруг например другой принтер будет опять печатать размыто из за того что у него какието параметры и тотже dpi отличается? Вот как в итоге выглядит шрифт: и вот как выглядит нечто подобное распечатанное с ексел: Качество намного лучше, потому что эксел знает что шрифт векторный и умеет его очень точно переводить в чб растр для принтера, или возможно что он отрпавляет принтеру векторные шрифты а тот сам умеет их превращать в идеальный растр для печати. Возникает вопрос а почему все так кисло происходит с печатью Bitmap вытащенного из datagridview? По сути data greed view это объект (типа) векторный и его можно увеличивать сколько угодно и вытащив с него bitmap в очень большом разрешении можно и распечатать все гораздо более красиво с более ровными шрифтами и границами ячеек. Так как же это можно сделать?
0
|
|
|
sleep
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,769
|
||
| 06.03.2023, 05:55 | ||
|
0
|
||
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||||||
| 07.03.2023, 09:35 | ||||||
|
Не, тут сомнений нет bitmap имеет качество идентичное оригинальному изображению. Я его сразу в направил в пикчабокс специально созданный для проверки качества. Все выглядит также как и на гридвью, никаких отличий.
Я подумал, а ведь по сути bitmap беретая с изображения гридвью на экране. А это значит чтотбудь у меня на мониторе разрешение 4к а не фул хд как сейчас то и качество печати улучшилось бы. Это очень странный способ печати получается. Добавлено через 5 часов 25 минут Вот код если что:
Не очень понятно почему нельзя просто скормить обьекту printDocument1 картинку а потом напечатать методом print.
0
|
||||||
|
sleep
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,769
|
|
| 07.03.2023, 09:45 | |
|
0
|
|
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 07.03.2023, 18:50 | |
|
Изначально было +10 я увеличил до 1000 надеясь увеличить качестао. Но это увеличение разрешения вообще никак не повлияло на качество печати. Именно в этой программе печатается только таблица. А во второй печатается вся форма с штрихкодом, текстбоксами и комбобоксами. Но по сути проблема одинаковая.
0
|
|
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 11.03.2023, 09:24 | |
|
Продолжаю изучать эту тему. Была мысль что я ошибся в том что bitmap resolution я устанавливал после того как изображение из GridView уже в него попало. Но оказалось что это нетак, увеличение resolution в любом случае приводит только к тому что изображение при печати становится маленьким. Получается что количество пикселов сгенерированного изображения из таблицы GridView не меняется.
Оказалось что по дефолту bitmap resolution 96 на 96 пикселов на дюйм. На сайте майкрософт действие метода .DrawToBitmap описывается как рендеринг элемента в Bitmap. Но при этом никакого упоминания о том где находятся параметры этого рендеринга, какие они по умолчанию и можно ли их вообще изменить. Собственно вот именно этот рендеринг и определяет качество печати в конечном итоге. Если поменять параметры этого рендеринга то можно получить требуемое качество печати. Вопрос в том как до них добраться? Я очень удивлен тем что никто особо не заморачивался печатью документов в windows forms. По крайней мере информации в интернете почти нет. Как же так? Я то думал что милионы людей делали милионы приложений на этой платформе для самых разных коммерческих потребностей, а похоже что всех устраивало ужасное качество печати по умолчанию?
0
|
|
|
sleep
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,769
|
||
| 11.03.2023, 14:46 | ||
|
Никаких больше дополнительных настроек принтера не делал, всё по умолчанию и никаких танцев с бубном.
0
|
||
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 12.03.2023, 01:30 | |
|
Понимаете в чем проблема, по ходу метод .DrawToBitmap делает вам копию изображения с экрана монитора.
В принципе это позволяет добиться качества печати на бумаге такого как на экране монитора. Но вот только делается это при помощи подбора dpi в ручную, либо вы должны вытащить из винды dpi монитора, потому что при рендеринге в Bitmap используется dpi монитора. Но есть проблемы с таким подходом. 1) Качество печати зависит от разрешения и dpi экрана установленного видеокартой и настройкой dpi в виндовсе. 2) Возможно что при смене разрешения монитора у вас поменятся не только качество печати но и размер изображения на листе. Тоесть если у пользователя монитор 720p то размер будет один а если 4к то совсем другой. 3) Экранного качества шрифтов недостаночно для печати на принтере. Эран имеет 100 точек на дюйм а принтер печатает 600 или даже 1200 точек на дюйм. Тоесть прочитать можно и выглядит все более или менее нормально но сильно уступает в качестве при печати с эксела ворда или браузера. По идее программа должна иметь возможность установить фиксированный всокий DPI для рендеринга методом .DrawToBitmap например 300 dpi и чтобы он не менялся в зависимости от настроек виндовс и разрешения монитора.
0
|
|
|
|
||
| 12.03.2023, 01:51 | ||
|
Святогор, пару дней наблюдал за этой темой, и так и не понял, чего вы собственно добиваетесь?
Основная ошибка в том, что качество печати ни в коем случае не зависит от текущего разрешения конкретного экрана. Это если речь идет о каких-то документах/изображениях. Если про рендеринг скриншотов с текущего экрана, то все уже давно придумано за нас (за вас), и существуют специальные Graphics Libraries для этого действа. Пересчитать кол-во отображаемых пикселей на конкретном мониторе в конечное разрешение результата - не составляет особого труда. Вопрос лишь в том, в какое качество жать. Ваш принтер ничего не пережимает, он лишь интерпретирует переданную в него информацию согласно выбранным настройкам печати. Святогор, хорош придумывать велосипеды..
0
|
||
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 12.03.2023, 02:11 | ||
|
PS Оказалось что стандартным DPI всех мониторов считается 96 точек на дюйм. И именно с таким dpi Windows Forms и рисует все элементы на форме. Но вот какая штука, сейчас полно мониторов с более высоким DPI например 32 дюймовый монитор с 4к разрешением явно будет иметь не 94 dpi и для этого случая предлагается в приложениях ввести поддержку высокго DPI иначе можно получить весьма обидные искажения и неверные масштабы.
Чтобы ввести поддержку высокого DPI в своём приложении там нехило так поколдовать надо со всякими текстовыми файлами и прочими настройками. Вывод: увеличивать DPI элементов на форме с целью улучшить качество печати шрифтов это тупиковый путь. Возникает ощущение что dot net не является полноценной средой для разработки коммерческих приложений, это похоже развлекуха сделанная для начинающих разрабов. Иначе очень трудно объяснить такой весьма примитивный подход к печати из приложений. Получается что для печати нужно использовать какой-то сторонний сервис например с помощью приложения эксел или браузера, что из визивиг приложения делает сущее издевательство. Добавлено через 13 минут Если я изобретаю велосипед то скажите каким образом можно напечатать таблицу gridveiw содержащую текст в разрешении 1200 dpi ? Сам майкрософт пишет что если у вас экран с разрешением например 140 dpi то без включения поддержки высокого разрешения вся ваша форма расползётся а рисунки растянутся, соответственно и при печати вы получите такой же результат. По сути дела у вас может быть монитор с высоким dpi. Виндузятина по HDMI или через драйвера узнает что у вас DPI 140 а не стандартные 96 и установит 140 DPI по умолчанию для всех приложений. Потом вы его отрендерите методом .DrawToBitmap в разрешении 140 dpi получите совершенно другое качество печати чем если бы у вас стоял стандартный фул хд монитор. Так что выходит что всетаки качество печати в некоторых случаях зависит от разрешения монитора.
0
|
||
|
|
||
| 12.03.2023, 02:47 | ||
|
Святогор, основной посыл - что именно вы печатаете. Есть большая разница между тем что вы видите на экране и тем, что из себя представляет файл, который вы смотрите.
Добавлено через 2 минуты
0
|
||
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 12.03.2023, 22:34 | ||
|
он именно и скриншотит ваш datagriedview c dpi 96 на 96. Объясните каким ещё способом можно распечатать datagriedview если не скриншотить его?
0
|
||
|
|
||
| 13.03.2023, 01:00 | ||
|
Добавлено через 1 минуту P.S. Загоните их в тот же Excel и печатайте с отличным качеством, без всяких скриншотов.
0
|
||
| 13.03.2023, 01:00 | |
|
Помогаю со студенческими работами здесь
20
Исследование модели RLC график функции повысить качество системы
Объясните пожалуйста, как создать кнопку печати из PictureBox? Плохое качество печати Качество печати через windows Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|