![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Всем доброго дня!
Имеется картинка BMP, в ценре какойто рисунок по бокам фон закрашен в какой либо однородный цвет, к примеру чёрный, белый и т.д. Так вот в чем вопрос, реально сделать так чтобы при выводе ресунка при помощи GDI, рисунок в центре остался а фон сделался прозрачным? За ранее спасибо! |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
см. справку по
TransparentBlt или AlphaBend -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Здравствуйте.
Аlexeis1,
В MSDN взял типовой пример, чуть подправил (смотри приложение). С функцией TransparentBlt разобраться не смог, можно поясненить ее назначение? Возник другой вопрос про псевдопрозрачность (или полную прозрачность по ключевому цвету). Т.е. когда в VC7 я рисую картинки, то один из цветов можно назначить прозрачным. При использовании картинки, в место прозрачного цвета будет использоваться bitmap области лежащей за ним. Вопрос как узнать, какое DWORD значение имеет этот прозрачный цвет? Есть ли специальная функция для копирования с одного битмепа на другой, так чтоб сработали прозрачные пиксели? Что быстрее будет работать?: - функция описаная мной в вопросе выше; - полный перебор всех DWORD`ов битмепа, и их обработка через альфа канал; - полный перебор всех DWORD`ов битмепа, использование GetPixel и SetPixel, с предварительной проверкой на нераветво значению прозрачного цвета. Это сообщение отредактировал(а) neosapient - 28.11.2006, 00:16 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Это и есть TransparentBlt. Она делает то же что BitBlt, но заданный цвет оставляет прозрачным. Разберись с классом функций XXXBlt, начиная с BitBlt: они все похожи. Однозначно быстрее (причем на порядок) работают функции XXXBlt, чем перебор пикселов. Они, кстати, вовсе не DWORD. Если ты полагаешь, что там лежат значения в формате COLORREF, то сильно ошибаешься. -------------------- ... |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Earnest, правь пример:
Я ожидал, что будет вывод рисунка по фиалетовой маске, но что то не работает Это сообщение отредактировал(а) neosapient - 28.11.2006, 10:05 Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
А что получается?
Вместо GetPixel попробуй подставить RGB явно... И убедись, что такой цвет реально есть... Сначала попробовал бы с чем-то очевидным, типа черного или белого цвета... -------------------- ... |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
А в чем проблема фиалетового? - обычный 0х00ff00ff GetPixel именно это значение и возвращаяет. [off topic] Люди добрые, сами мы не местные, грамоте не учены, клавиатуры пугаимси. [/off topic] В общем помогите сделать пример работы ф-ции TransparentBlt, я попытался, но не выходит. В моем примере после вызова TransparentBlt, GetLastError возвращает ошибку 87: "The parameter is incorrect. " Это сообщение отредактировал(а) neosapient - 28.11.2006, 14:01 |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Понял в чем проблема.
неправильно ввел размеры Какой функцией можно узнать размеры битмепа? Это сообщение отредактировал(а) neosapient - 28.11.2006, 15:35 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
вот так вот у меня на билдере вышло.
GetObject() Это сообщение отредактировал(а) alexeis1 - 28.11.2006, 16:40 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Спасибо, теперь все работает. Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "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. |