Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование битмапов. Как нарисовать его прозрачным. 
V
    Опции темы
Rapalex
Дата 27.7.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Системма такая у меня есть главный вю приложения на нём чтото рисуется, и ето чтото можно вращять за нарисованые стрелочки.

Т.к. в настройках вю может изменить цвет и стрелочки могут изменить цвет, я в ресурсах нарисовал монохромную стрелку а перед отрисовкой на экране нулевые писели залил цветом фона а чёрные другим цветом.

Рисую BitBlt. И получается не очень красиво, зарисовывается то что должно быть видно.

см. рис. - на нём белая линия не должна полностью пропадать.

Так как мне сдалать так чтоб белая линия дожла до стрелки? 

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  Pic.PNG 0,26 Kb


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
SergeCpp
Дата 27.7.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



Наверное, вот в эту сторону стоит посмотреть...

Ternary Raster Operations 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 27.7.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Битблит имеет различные операции. Ты, наверное, просто COPY делаешь. А надо:
1) Очистить маской то место, где должна быть стрелка, не трогая все остальное (1я операция)
2) Положить сверху, уже операцией ИЛИ. 
Итак, тебе нужно 2 операции битблит: вырезание маской и наложение. И нужны 2 битмапа, причем именно монохромных, т.е. однобитных. Первый - белая (единицы) стрелка, черный (фон), Второй - наоборот. Естественно, второй легко получается из первого.
Второй - это и есть маска вырезания, кладешь ее бит-блитом операцией SRCAND.
Далее кладешь первый битмап операцией SRCPAINT, но предварительно выставляешь контексту
 назначения SetTextColor тот цвет, которым должна быть стрелка - это избаляет тебя от перекрашивания битмапа-маски.

Можно обойтись бы и одним битмапом, для этого нужна операция, которая называлась бы DSTERASE: т.е. комбинировала бы инвертированные цвета маски с цветами в контексте операцией AND. Самое смешное, что такая операция поддерживается, но ее код нужно "вычислить". Я, к сожалению, уже не помню...

Кстати, по ссылке, которую SergeCpp дал, как раз описывается, как вычислить код операции. А еще, с помощью MaskBlt, это вроде можно заменить одной операцией.  

Это сообщение отредактировал(а) Earnest - 27.7.2006, 17:07


--------------------
...
PM   Вверх
Rapalex
Дата 28.7.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Сижу делаю, уже задалбался smile , чтото не получается, а нет ли чегото что работает с прозрачными цветами (типа альфа в OpenGL). С зачем SetTextColor я так и ен понял, я устанавливаю и ничего не меняется!!!

MaskBlt - вообще не понятно что и как?

Если ли классы которые позволяют какойто цвет в изображении как tranparent выбрать? 

Это сообщение отредактировал(а) Rapalex - 28.7.2006, 16:32


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Rapalex
Дата 3.8.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Earnest, я так смотрел используя MaskBlt возможно будет такое нарисовать только если во временый буфер скопировать изображение экрана (ну не всё а толькл тот прямоугольник который буду перерисовывать).

А вот с Ternary Raster Operations не всё ясно это значение в какую функцию нужно передавать?

Да и как вычеслять чтото не очень понятно, может кто подсказку на русском даст?


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Rapalex
Дата 3.8.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Получилдось ответ 0x00B8074A в BitBlt или PSDPxax, а я и не знал что такое возможно, большое спасибо.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
bilbobagginz
Дата 30.12.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



тема старая и решенная, но наверное стоит добавить о GDI+
Код

#include <gdiplus.h>
using namespace Gdiplus;

есть такая штука в новых версиях виндовс.
она поддерживает Аlpha и т.д.,  прозрачность и т.п.
верхняя иерархия мсдн о GDI+



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1303 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.