![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Привет, винградовцы
Есть картинка, которую необходимо нарисовать на форме средствами WinAPI. Чтобы картинка красиво отображалась без фона для нее нужно подобрать маску прозрачности. Так вот вопрос - как правильно это сделать? Рисовать маску ручками в фотошопе - обводить дотошно контур рисунка или использовать функцию MaskBlt, правда она создает не самую лучшую маску, в результате края картинки получаются рублеными... Картинку конвертировал в jpeg чтобы она прикрепиласть, изначально была bmp Присоединённый файл ( Кол-во скачиваний: 33 )
binoculars.jpg 1,35 Kb |
|||
|
||||
| x128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Как вариант, можно записать в альфа-канал разницу текущего пиксела и фона. Для твоей картинки, все пикселы белого цвета станут полностью прозрачные и чем сильнее цвет отличается от белого, тем менее прозрачный пиксел.
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
ещё варианты:
можно сделать png и выводить через gdi+ можно положить на окно, и это окно обрезать регионом под картинку. А края картинки и есть рубленые, ибо сглаживание с фоном. Видимо фотошоп постарался. рисуй маску ручками, или правь картинку без сглаживания. |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Прикрепил картинку того, что получается при использовании MaskBlt() - исключается только белый цвет, а тень под биноклем получается, ка рубленный кусок. Попробую способ с альфа каналом, по идее тень должна сгладиться. Не охота gdi+ тянуть так вот, как края сгладить с фоном, если фон может быть разный? Это сообщение отредактировал(а) Coder - 21.7.2010, 10:27 Присоединённый файл ( Кол-во скачиваний: 23 )
untitled.JPG 3,18 Kb |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
ну gdi+ тянуть никуда не нужно - он в винде уже имеется.
А картинку как раз и не нужно смешивать с фоном. В этом как раз и проблема, что фотошоп тебе уже наперемешивал с белым фоном. Нужно переделывать в png, отрезать полностью тень и рисовать новую - честно полупрозрачную. Эта тень уже испорчена смешиванием с белым цветом. Если без альфа канала, то нужно просто тень превратить в полность серую. Не програмно, а в паинте ручками. Тут не програмная проблема - проблема в самой картинке. |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 6 Всего: 27 |
А зачем gdi+? PNG нормально рисуется в Delphi7 без gdi+ Подключи в uses файл PNGImage из приложенного архива, и можешь делать так:
Это сообщение отредактировал(а) Bitter - 21.7.2010, 12:17 Присоединённый файл ( Кол-во скачиваний: 7 )
PNG.rar 53,20 Kb |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 18 Всего: 484 |
||||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 6 Всего: 27 |
а, блин. Ну тогда отбой тревоги
|
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
собрать битмап 32-х битный с альфой и вывести через alphablend() (картинка может изначально была в bmp 32 битном?)
|
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
спасибо, так и сделал все получилось! с тенью - красиво! мне не хотелось тянуть заголовочные файлы gdi+, но в дальнейшем придется выводить jpeg так что пусть будут
а с этим способом не разобрался :( вроде в фотошопе отображается, что есть альфа канал и картинка 32-битная. а как туда записать разницу и правильно вызвать alphablend, увы ... получилось только вывести полупрозрачную картинку с белым фоном. ведь БМП не может без фона! далек я от графики Это сообщение отредактировал(а) Coder - 22.7.2010, 04:06 |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Тебе нужно было вывести с полупрозрачностью или с поддержкой transaprent_color (цветовой ключ, прозрачный цвет как в GIF)?
Если первое - то маску ты сам никак не сделаешь в общем случае. А именно таким способом выведен твой бинокль на белую подложку, с альфой. Отсюда нужно исходное изображение с поддержкой альфаканала (png, bmp), все костыльные способы с перегоном в png, созданием цветового ключа и рисованием тени от руки не дадут исходного результата |
|||
|
||||
| x128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Исходного не дадут, но приемлемого результата вполне можно добиться. ![]() Картинка преобразована из JPEG-а в в первом сообщении и нарисована с помощью AlphaBlend. Coder, картинку прикрепил, если результат устраивает, поделюсь кодом преобразования. И прикрепи оригинальную картинку, а не JPEG. Присоединённый файл ( Кол-во скачиваний: 6 )
binoculars.png 1,11 Kb |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
ну это кастыльный метод, не ко всем изображениям применим, не говоря уже о том, что нарисуется не та картинка, которая была художником создана
например с подобной придется повозиться, причем уже ручками: |
|||
|
||||
| x128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Понятное дело, что не всегда получится приемлемый результат и точно не выйдет восстановить оригинал, но за не имением оригинала, это лучше чем ничего. Возиться не пришлось, результат конечно не оригинал, но смотрится не плохо ![]() Присоединённый файл ( Кол-во скачиваний: 5 )
test.png 8,38 Kb |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
ну да, цвета становятся "грязноватыми"
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |