![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Добрый день, может кто может подсказать, я давно видел статью, как делать форму в виде картинки без использования Регионов. Там форма была в точности, как картинка с тенями и без квадратного очертания.
Может у кого есть код или доходчивая статья, за счет чего и как это делается? Спасибо. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Это сообщение отредактировал(а) 586 - 4.12.2010, 17:03 |
|||
|
||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да я знаю на счет этой функции, но она делает полностью окно прозрачным вроде? Ну а если нарисовать картинку, а вокруг нее залить все прозрачным цветом, то останется рамка окна.
Я читал, что это как-то делается через ДИБ битмапы и PNG картинки, но я не нашел полного руководства, что к чему. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Попробую.
Но вообще меня интересует вот такой результат. http://www.codeproject.com/KB/GDI/pxalphablend/img2.gif |
|||
|
||||
586 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Если ещё полупрозрачность нужна, тогда так:
|
||||
|
|||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
И что в картинке будет полупрозрачным?
|
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Вся картинка. А фон будет невидимым. Вот так будет: Присоединённый файл ( Кол-во скачиваний: 35 ) ![]() |
|||
|
||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да получилось, но что у меня, что у вас на скрине, видно, что очертание рисунка пострадало. А на том скрине, что я привел, там даже тени имеются от рисунка. Я вот о чем)
Хотя этот метод тоже возьму на заметку. Есть еще идеи?) |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да я думаю дело не в этом. Я как только картинку делаю БМП формата стразу теряются ее цвета и она становиться невзрачной.
Вот нашел статью, где описывается работа с альфа-каналом http://www.infocity.kiev.ua/graf/content/graf093.phtml но там тоже ничего конкретного, все в общих чертах, а что для чего и как - умалчивается. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
эту проблему немного обсуждали тут: http://forum.vingrad.ru/forum/topic-264876...258C/index.html Добавлено через 5 минут и 53 секунды кстати, загляни еще раз в RSDN, присмотрись к прозрачной картинке с текстом RSDN, видишь, шум есть даже там :)) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да шум есть, но то обсуждения были для 98 винды) Может что изменилось. Та и вот в том скрине, что я привел первым, там все четко и красиво)
Но там я прочитал используется либа одна, чтобы открывать ПСП файлы ну и сам код тоже не документирован. Нашел вот такую ссылочку http://blog.duck17.net/post/Per-pixel-Alph...-Win32-API.aspx но, я что-то не пойму, как делать БМП с альфа-каналом. |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
в 2009-м году 98 вендой, я не настолько суров :))
ну я практически уверен, что тень там формируется одним растром, за счет градаций четвертой компоненты (альфа-канала), а не полутонов с остальными тремя, т.е. надо использовать UpdateLayeredWindow с ULW_ALPHA, по ссылке кстати хороший пример, смотри функцию Paint тут через временный HDC в UpdateLayeredWindow передается картинка с альфаканалом и для нее устанавливаются атрибуты BLENDFUNCTION, аналогично как в функции AlphaBlend альфаканал можно задать в PNG, любым соответствующим редактором, либо в примере показан способ, как это сделать с обычным битмапом, испрльзуя фотошоп, только вот чтобы его прочитать, придется использовать DIB'ы, поэтому тут и стоит SetDIBitsToDevice, простой LoadImage будет игнорировать альфу, хотя по идее там есть возможность задействовать DIB-секцию BitBlt, конечно же :)) Это сообщение отредактировал(а) GremlinProg - 11.1.2011, 09:39 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Так, уточню. Тобишь PNG формат загрузится через LoadImage, или что PNG, что Битмап надо грузить через секции?
Кстати какой редактор то? МСПэинт подойдет? Или фотошоп? И как это хоть сделать)? |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
загрузи пример, там же есть исходник
можно фотошопом, но я не особо ему доверяю в плане полутонов, а вот у Paint.Net есть очень удобная палитра, в которой этой альфой можно как рисовать, так и сохранять с ней полноценные растры: http://forums.getpaint.net/index.php?/topi...t-for-paintnet/ у Paint.Net это формат *.bmpx, т.е. это тот же 32-битный битмап (т.е. формат обычного битмапа), но уже с альфа-составляющей ps: на сколько понял, плагин bmpx на данный момент поставляется в базовой комплектации редактора -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Исходник то есть, но и БМП там 32битовый, но я что-то не пойму, что нужно сделать, чтобы получить такую картинку. Скачал Пэинт НЭТ, чем рисовать этот альфа канал, что-то не понял.
![]() |
|||
|
||||
TGrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Так ну все, я нашел в гугле, как создавать этот канал, буду пробовать кодить. Если кто еще наткнется на эту тему вот еще пару полезных ссылок.
http://www.codeproject.com/KB/buttons/Tran...tonNetDemo.aspx http://www.axialis.com/tutorials/tutorial-misc001.html http://stackoverflow.com/questions/307348/...channel-bitmaps |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
создаешь например 2 слоя, на верхнем рисуешь что-нибудь, цвет выбираешь из палитры, только разверни эту палитру (кнопка "Больше >>"), там будет бегунок "прозрачность (альфа)" 0 - прозрачный, 255 - непрозрачный так и рисовать, а потом сохранить рисунок как *.bmpx -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AntonN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Не надо править в редакторе исходное изображение, UpdatelayeredWindow использует упрощенную формулу бленда, нужно перед самым ее использованием у битмапа все каналы умножить на альфу (т.е. они затемнятся). В принципе такое можно сделать и в редакторе, но если изображение формируется динамически или из нескольких спрайтов, то такой способ недопустим. |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
упрощенная формула бленда к шуму на краях полутонового растра с тенями не имеет ни какого отношения -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
самое прямое.
думаю понятно на картинке где какое изображение, такая же елочка выше на том же фоне ![]() Это сообщение отредактировал(а) AntonN - 10.1.2011, 19:09 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
аха, прямо,
давай вот так же этот сделай:
:)) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ну, махинации с альфой тут не пройдут, я же говорю, "сделай с этим", а не так же :))
умножай альфу вот на этом растре: ![]() и покажи его к примеру на зеленом или черном фоне -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Кому интересно вот исходник с примером.
Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
AntonN |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
-->
в нем нет альфы |
||||||
|
|||||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
поэтому я и говорю: "Безумству храбрых поем мы песню..." :)) Это сообщение отредактировал(а) GremlinProg - 12.1.2011, 09:16 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
У него был альфаканал. А в 11 при попытке сделать его bmp - формат менялся.
Но пой, пой.. ![]() Кстати, для собирания bmp 32-битного я написал себе давно утилитку, чтобы от фотошопов не зависеть. Если кому надо - дам ссылку |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
AntonN, ты сейчас пытаешься всем доказать, что SetLayeredWindowAttributes, который задействовал 586 в своем примере: http://forum.vingrad.ru/index.php?showtopi...t&p=2259943 , использует какой-то альфаканал рисуемого растра (той самой ёлочки) будешь дальше продолжать бессмысленную болтовню, получишь втык за оффтоп, это первое и последнее предупреждение (раз уж вникать в проблему топика ты не желаешь)
для собирания bmp 32-битного все уже давно написано, и даже собрав этот bmp, без дополнительной модификации битмапа (построения альфаканала) и использования UpdateLayeredWindow, либо AlphaBlend ты не получишь результат, продемонстрированный на первом скрине от TGrey -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AntonN |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
нет
а вот и ответ о чем я спорю: что там за модификации битмапа (построения альфаканала) требуются? ![]() Или в Си нет попиксельных операций и сначала создается битмап о 32 битах с обнуленной альфой, и для ее "модификации" требуется внешний графический редактор? Это и есть та самая "модификация"? ![]()
это пятое сообщение этой темы? Как раз такое изображение и получается с помощью UpdateLayeredWindow |
||||||
|
|||||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
так где ответ-то? это только до меня туго доходит или не я один вижу после слова "ответ" вопрос? то, что ты не читал топик перед ответом и так понятно, это не преступление, но какой смысл теперь юлить, подгоняя ответ "не в тему" под ответ "в тему" я отвечал на вопрос TGrey по коду 586, с SetLayeredWindowAttributes а ты цитируешь этот мой ответ с указанием на UpdateLayeredWindow, о котором речь пошла уже после примера с ёлочкой, причем в ёлочке ты откуда-то находишь альфу и упорно гнешь на то, что она рисуется с UpdateLayeredWindow, хотя 586 уже заведомо указал свой метод, приложив код исходя из этого, отправляйся в угол на 5 дней с "неудом" в дневник, жестоко, а что делать, я предупреждал для остальных, тематическая часть топика была закончена вот здесь: http://forum.vingrad.ru/index.php?showtopi...t&p=2262964 + очень уместный код от Dem_max: http://forum.vingrad.ru/index.php?showtopi...t&p=2280762 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |