|
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 4
|
||||||||||||||||
Как повысить качество печати текста с pictureBox18.01.2018, 11:28. Показов 3557. Ответов 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
|
|
|
dive
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
|
|
| 05.03.2023, 00:45 | |
|
0
|
|
|
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||||||
| 05.03.2023, 01:07 | ||||||
|
Пробовал не помогло.
Видно что разрешения хватает но изображение расплылось. Там заметна характерная размывка от сжатия. Я думал что оно расплывается в ходе преобразования цветного изображения в растр но при печати в Microsoft XPS Document Writer рисунок сохраняется тоже расплычатый хоть и цветной. вот:
0
|
||||||
|
dive
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
|
||||||||
| 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
|
|
|
dive
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
|
||
| 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
|
||||||
|
dive
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
|
|
| 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
|
|
|
dive
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
|
||
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|