|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Собственно сам вопрос и мое тест приложение, которое это делает (через GDI+/- + encoders) здесь: Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые! Дмитрий77Теперь задумался над: 2) там используется "черно-белый" при сохранении. Если конвертировать цветную картинку, то будет "сильно намазано черным", нормальные "принтеры" делают "в градациях серого" (при этом результирующий tiff будет того же формата что и у меня, но картинка будет смотреться совершенно по-другому). Позже могу скинуть примеры таких конвертаций. Т.е. как это облагородить? Но подозреваю что фотоэффект на 2-цветной картинке (ч/б глубина=1 а не глубина=8) делается какими-то нелинейными махинациями. Суть в чем: если уже есть такая "в сером" картинка, то мое преобразование ее не портит, а если бухаю на свой вход цветной оригинал, то на моем выходе получаю черную мазню. Хочу "в сером". Иллюстрирую на картинке: Чтобы было ясно что я не туплю и не обманываю (т.е. глубина цвета ==1 на обоих нижних рисунках), все 3 картинки во вложении по ссылке ниже: Понятно, что хочу как справа внизу. Понятно что можно сделать 8-битный tiff и будет то же и даже лучше. Но нужно чтоб это было ч/б т.е. кодировано черный/белый. Есть в GDI+/- или в encoders параметры, чтобы так сделать? Или как это вообще делается (на примерах кода). Подозреваю, что достигается хитрой комбинацией чередования белых и черных квадратиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 12:48 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Сделал кое-что. SetStretchBltMode Function HALFTONE Maps pixels from the source rectangle into blocks of pixels in the destination rectangle. The average color over the destination block of pixels approximates the color of the source pixels. After setting the HALFTONE stretching mode, an application must call the SetBrushOrgEx function to set the brush origin. If it fails to do so, brush misalignment occurs . Это применяется перед тем как проецировать рисунок на новое hdc Код: plaintext 1.
Короче вроде получается чего хочу (тек. проект прилагается) Но есть одно но: Пример конвертации Получается очень большой файл (порядка мегабайта) 1) ощущение что темновато надо б осветлить (Halftone Brightness) 2) ощущение что уж очень винды хорошую точность сделать пытаются В венте напр. есть параметры: Код: plaintext 1. 2. 3. 4. 5. 6.
Функций gdi+/- кот. бы регулировали сглаживание/яркость я пока не нашел. На C-шном форуме дали ссылку About Pic2HTML но вычислять самому каждый пиксель последовательным приближением желания точно нет. Нужно что-то более высокоуровневое. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 01:43 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Дмитрий77, есть вариант с GDI+, но он не универсален (а то и "левый"), так как требует GDI+ версии больше 1.0. Проблема в том, что нет (вроде бы) redistributable-пакета установки версии 1.1, например, для XP или 2000. Да и в Windows 7 надо (опять таки "вроде бы" - не занимался) какие-то усилия прикладывать, манифест писать. Я как-то хотел пощупать новые относительно 1.0 фичи и нашёл в общей папке офиса версию gdiplus.dll, видимо, занимающую промежуточное положение между 1.0 и 1.1. Собственно, код (добавка к классу ): В описаниях: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Код конвертации формата: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Что касается перевода в ч/б изображение с дизерингом, а не просто по уровню яркости, только средствами GDI+ 1.0, то здесь надо бы посмотреть теорию, как это делается. Первый шаг, вероятно, будет перевод цветного изображени в оттенки серого, но с этим особо проблем нет, погуглите (немецкий) код с примерно такими словами Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 02:22 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Дмитрий77, на всякий случай конвертированное изображение в архиве. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 02:24 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Бенедиктесть вариант с GDI+, но он не универсален (а то и "левый"), так как требует GDI+ версии больше 1.0. Проблема в том, что нет (вроде бы) redistributable-пакета установки версии 1.1, например, для XP или 2000. Да и в Windows 7 надо (опять таки "вроде бы" - не занимался) какие-то усилия прикладывать, манифест писать. Я как-то хотел пощупать новые относительно 1.0 фичи и нашёл в общей папке офиса версию gdiplus.dll, видимо, занимающую промежуточное положение между 1.0 и 1.1. Значит, смотрите. Я путь в декларациях не указывал, а скомпилировал тупо. На XP и на Висте (что странно, т.к. якобы там уже это есть) программа меня выкинула с DllEntry. Но на 7-ке тот же exe-шник сработал. Но: (полная коллекция пингвинов по ссылке ниже): Пингвины from_hor -из "альбома" from_vert -заранее перевернул "в портрет" venta (как делает venta, к чему стремимся) halftone -то что делает SetStretchBltMode hdcDst, HALFTONE gdi11 -ваш метод БенедиктЗдесь есть, возможно, проблемка с третьим параметром GdipBitmapConvertFormat. Как мне кажется, тот результат, что в приложении, должен достигаться при DitherTypeErrorDiffusion (=10), но у меня нет "семёрки", а офисная версия GDI+ принимает для ч/б изображений только DitherTypeSolid и 9 (т. е. DitherTypeDualSpiral8x8). Не-а, только 9-ка работает, еще 1-ца делает ч/б мазню. Но ...я думаю это вообще не тот путь (не говоря о сложности внедрения v1.1 -это исключено) Но 9-ка делает совсем не то что делает Venta. Dithering -это возможно вообще не то. А вот SetStretchBltMode hdcDst, HALFTONE как раз делает "то", но больно уж тщательно. Не говоря о том, что вента писалась давно очень, и точно gdiplus1.1 не использует. Но также не думаю что они интегралы/производные по пикселям вручную строят. Дмитрий772) ощущение что уж очень винды хорошую точность сделать пытаются В венте напр. есть параметры: Код: plaintext 1. 2. 3. 4. 5. 6.
Бенедикта вот как паттерны в сером искать для получения ч/б, надо читать. 2х2;4х4 -это вы про паттерны? об одном и том же ссылка кстати ваша не работает Ну и... Дмитрий771) ощущение что темновато надо б осветлить (Halftone Brightness) Ну т.е. "квадратики побольше размером" и чуть "просветлить", и будет файл в 3 раза меньше (как у Венты) , хорош визуально, и то что надо. Основной вопрос: КАК? Просто этот дитеринг, это выжигание точками на дощечке -смотрится похабно. И у венты, и у halftone сетка прямоугольная, если обратили внимание. Плюс я еще не пойму, почему когда я делаю "с поворотом на 90" (через свой код), качество HALFTONE сильно хуже. Было бы неплохо, если бы вы критиканули (м.б. помогли) с кодом "поворота на 90". (крайний проект в этой теме выше). Сделать то я сделал через WordTransform, ну из за путаницы с координатами делаю в 2 этапа вместо одного (очевидно излишки). Т.е. не могу высчитать как спроецировать перевернутую на 90 градусов картинку на первый hdcdst НО с масштабированием . Возможно из за этого дуализма и качество ч/б в итоге страдает, ибо полутона применяются дважды. Или может хотя бы в первом действии (поворот на 90) хотя бы палитру не поганить? Только как тогда ее записать для bmidst (вместо ч/б)? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 12:03 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Дмитрий77, перманентный цейтнот, опять тезисно: 1) Нет цветных пингвинов. 2) Размер несжатой картинки 1728*2340*1/8=505440, значит размер TIFF-а более 1 Мб прихоть кодировки. Попробуйте LZW. 3) Про поворот помню, не доходят руки. Если не волнует вопрос совместимости с не-NT, gопробуйте вместо SetWorldTransform - BitBlt использовать одиночный PlgBlt, там координаты явно задаются. 4) Не работающая (в IE) ссылка - тот же TIFF, что и в следующем сообщении. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 14:51 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Бенедикт1) Нет цветных пингвинов.. Цветные пингвины Бенедикт2) Размер несжатой картинки 1728*2340*1/8=505440, значит размер TIFF-а более 1 Мб прихоть кодировки. Попробуйте LZW.. Странная прихоть...LZW для ч/б факсов дурной тон (о цветных речь не идет) Хотя я обратил внимание что вента клепает пингвинов в Group3 (1d)...попробую позже Там правда какие-то глюки с виндовским Group3-encoder, надо читать собственные топики годичной давности. У виндов еще проблема с битом кот. устанавливает "Reversed bit order", якобы лепят 0 где по определению м.б. только 1 или 2 Ничего на тему этого подлого бита не думаете (его можно также поменять тупым доступом к файлу или через libtiff например)? Бенедикт3) Про поворот помню, не доходят руки. Если не волнует вопрос совместимости с не-NT, gопробуйте вместо SetWorldTransform - BitBlt использовать одиночный PlgBlt, там координаты явно задаются.. Неохота на самом деле еще чего-то лепить, если SetWorldTransform работает. Проблем(к)а в том что в случае поворота я 1) дважды делаю преобразование к ч/б 2) дважды устанавливаю полутона Т.е. как бы сделать так, чтоб первый этап (поворот) осуществлялся без деградации цветов и т.п.? Дальше, м.б. вообще плюнуть и сделать "левым методом" через GHostScript или libtiff (но самогордость, т.сказать не позволяет). GHostScript прекрасно конвертит pdf в Group3/4 причем с выравниванием размера и цвета с корректными полутонами. Но я напр. не знаю как сконвертить GS:tiff->tiff не говоря о всем остальном обезьяннике bmp/jpg форматов. Собственно на gs я вроде как подписался с т.зр. pdf, но оказывается он размеры не всегда правильно делает: http://asteriskforum.ru/viewtopic.php?t=1761&start=500 Собсвенно все это и подхлестнуло опять влезть в graphic-програмирование, хочется все же написать свой универсальный конвертер. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 17:15 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Дмитрий77Бенедикт2) Размер несжатой картинки 1728*2340*1/8=505440, значит размер TIFF-а более 1 Мб прихоть кодировки. Попробуйте LZW.. Странная прихоть...LZW для ч/б факсов дурной тон (о цветных речь не идет) Хотя я обратил внимание что вента клепает пингвинов в Group3 (1d)...попробую позже Значит так... Group3 и Group4 по прожорливости (в смысле размеров файла) примерно одинаковы -могут добить до 1МБ и выше. Но дело не в этом. Новый тест - скачать My_LZW.tif -то что я делаю в LZW 110кБ -но идет по факсу 10 минут на 14400 и на выходе после факса все равно g3/1МБ Venta_g3 -то что делает вента Group3 267кБ - но идет по факсу меньше 3 минут на 14400 и на выходе такой же размер 268кб g3 Т.е. факсу плевать на исх. компрессию -так понимаю чем больше черного (или переходов между цветами, не знаю) - тем дело хуже. Задача: сделать 1) светлее 2) м.б. грубее а на 300кб g3/g4 я понятно согласен вместо 100кб LZW На всяк. случай ниже последняя версия проекта, где в ComboBox можно выбрать компрессию tiff (для двух основных тестовых кнопок) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 19:36 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Дмитрий77Проблем(к)а в том что в случае поворота я 1) дважды делаю преобразование к ч/б 2) дважды устанавливаю полутона Т.е. как бы сделать так, чтоб первый этап (поворот) осуществлялся без деградации цветов и т.п.? Это решается если в первом преобразовании Код: plaintext 1. 2.
Хотя, опять же возможные излишки. Как бы выяснить, что у нас во Frame(i) черно-белое ли изначально изображение? Чтобы не издеваться например над черным текстом, или например над результатом полученным из GS (pdf->tiff). Дело в том что HALFTONE будучи применен там где это не надо, пусть незначительно, но увеличит размер файла, да и подпортить может надо думать. А время прохождения факса (что мне важно) зависит не от количества черного и белого, наверно не от яркости, а от чередования пикселей , т.е. напр. 3 белых-2черных-4 белых это хуже чем 1белый-1черный-2белых. Скорее всего pattern size и от этого косвенно зависит размер файла (1МБ вместо 300кб). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 02:14 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Собака зарыта где-то здесь: Halftoning The driver sends GDI the device-related specifications that GDI needs to do halftoning through the GDIINFO structure returned by the DrvEnablePDEV function. The driver specifies the pattern size with the ulHTPatternSize member of GDIINFO, which defines the preferred output format for halftoning. For specific devices, halftoning relates to the halftone pattern sizes. GDI provides numerous predefined pattern sizes from 2 x 2 through 16 x 16. ulHTPatternSize Specifies the size of the halftone pattern. The values ending with AxB_M are variations of the AxB patterns. In other words, SIZE_AxB and SIZE_AxB_M differ by which pixels are lit in an A x B pattern. This member can be one of the following values: HT_PATSIZE_2x2 HT_PATSIZE_2x2_M HT_PATSIZE_4x4 HT_PATSIZE_4x4_M HT_PATSIZE_6x6 HT_PATSIZE_6x6_M HT_PATSIZE_8x8 HT_PATSIZE_8x8_M HT_PATSIZE_10x10 HT_PATSIZE_10x10_M HT_PATSIZE_12x12 HT_PATSIZE_12x12_M HT_PATSIZE_14x14 HT_PATSIZE_14x14_M HT_PATSIZE_16x16 HT_PATSIZE_16x16_M HT_PATSIZE_SUPERCELL HT_PATSIZE_SUPERCELL_M HT_PATSIZE_USER HT_PATSIZE_MAX_INDEX HT_PATSIZE_DEFAULT Только как к этому всему подцепиться. Мне нужен именно конвертер, а не принтер, а тут речь о каких-то девайсах идет. GDI handles color adjustment requests from the application and passes the information down to driver functions through the graphics DDI. If the application selects halftoning and the surface is a standard format DIB, GDI processes the bitmap using its halftoning capabilities, after which, the bitmap is sent to the device. У нас как раз DIB...не знаю чего делать ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 04:09 |
|
Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов
|
|||
---|---|---|---|
#18+
Бенедикт, а на GDI свет клином сошелся? Идея такая. Есть Ghostcript. Я его все равно прикрутил уже как DLL, потому что нужно уметь работать и с PDF тоже. При конвертации цветной PDF -> ч/б TIFF он делает прекрасный HALFTONE. Беда в том, что этот гад на вход принимает только PDF и PS, хотя очевидно знает все обычные форматы типа BMP, JPG, PNG, ибо прекрасно умеет их всех делать. Нет ли там какой API, чтоб из цветного bitmap делала "волшебный черно-белый" приемлемый для указанных целей? М.б. сталкивались, если с графикой так много работаете? Максимум, чего я придумал логически. 1) {BMP,GIF, JPG} -> GDI -> Цветной TIFF 2) Цветной TIFF -> libtiff -> "Цветной" PDF 3) "Цветной" PDF -> GS с его dithering -> b/w tiff Понятно, что это будет работать, даже не проверял. Но это ж идиотизм чистой воды, переливание из пустого в порожнее. И куча времени (ощутимого если несколько страниц). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 02:38 |
|
|
start [/forum/topic.php?fid=60&fpage=103&tid=2158784]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 347ms |
total: | 630ms |
0 / 0 |