Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прозрачный рисунок


Andre ©   (2003-07-05 03:28:00) 

Всем привет. Такой вот вопрос: как с помощью API сделать .ICO прозрачной (или .BMP)?


Andre   (2003-07-20 02:21:00) [1]

С AlphaBlend пошло всё неплохо, но необходимо как-то убрать цвет фона (сделать его абсолютно прозрачным). Подумаю на досуге.


Andre   (2003-07-19 02:48:00) [2]


> Rouse_ © ( поверх всех окон)


> Rouse_ ©
> Поясни фразу "Я рисую прямо на экране"
>
> На рабочем столе?

Да, прямо на рабочем столе (поверх всех окон).


Th   (2003-07-16 19:30:00) [3]

to Andre см. в MSDN функцию AlphaBlend


Rouse_   (2003-07-16 06:20:00) [4]

Поясни фразу "Я рисую прямо на экране"

На рабочем столе?

Если я прав.....

Желаю успехов


Andre   (2003-07-16 04:47:00) [5]

А я сделал так:
begin

Randomize;
XScreen := Random (GetSystemMetrics (SM_CXSCREEN) - 16);//Положение - от потолка:)
YScreen := Random (GetSystemMetrics (SM_CYSCREEN) - 16);
Transparent := Random (100);//Прозрачность - то же от балды:)
Width := 31;//А как узнать размеры произвольной картинки (в пикселях)?
Height := 31;
DC := GetDC (0);
picDC := CreateCompatibleDC (0);
Picture := LoadBitmap (HInstance, "SNEG");
SelectObject (picDC, picture);
for x := 0 to Width do
begin
for y := 0 to Height do
begin
DCColor := GetPixel (DC, (XScreen + x), (YScreen + y));
PicDCColor := GetPixel (PicDC, x, y);
if PicDCColor = GetPixel (PicDC, 0, 0) then SetPixel (DC, (XScreen + x), (YScreen + y), DCColor)
else
begin
RPic := GetRValue (DCColor);
GPic := GetGValue (DCColor);
BPic := GetBValue (DCColor);
RPic := (RPic * Transparent + (GetRValue (PicDCColor) * (100 - Transparent))) div 100;
GPic := (GPic * Transparent + (GetGValue (PicDCColor) * (100 - Transparent))) div 100;
BPic := (BPic * Transparent + (GetBValue (PicDCColor) * (100 - Transparent))) div 100;
DCColor := RGB (RPic, GPic, BPic);
SetPixel (DC, (XScreen + x), (YScreen + y), DCColor);
end;
end;
end;
DeleteDC (picDC);
DeleteObject (picture);
( 0, DC)

А я сделал так:
begin

Randomize;
XScreen := Random (GetSystemMetrics (SM_CXSCREEN) - 16);//Положение - от потолка:)
YScreen := Random (GetSystemMetrics (SM_CYSCREEN) - 16);
Transparent := Random (100);//Прозрачность - то же от балды:)
Width := 31;//А как узнать размеры произвольной картинки (в пикселях)?
Height := 31;
DC := GetDC (0);
picDC := CreateCompatibleDC (0);
Picture := LoadBitmap (HInstance, "SNEG");
SelectObject (picDC, picture);
for x := 0 to Width do
begin
for y := 0 to Height do
begin
DCColor := GetPixel (DC, (XScreen + x), (YScreen + y));
PicDCColor := GetPixel (PicDC, x, y);
if PicDCColor = GetPixel (PicDC, 0, 0) then SetPixel (DC, (XScreen + x), (YScreen + y), DCColor)
else
begin
RPic := GetRValue (DCColor);
GPic := GetGValue (DCColor);
BPic := GetBValue (DCColor);
RPic := (RPic * Transparent + (GetRValue (PicDCColor) * (100 - Transparent))) div 100;
GPic := (GPic * Transparent + (GetGValue (PicDCColor) * (100 - Transparent))) div 100;
BPic := (BPic * Transparent + (GetBValue (PicDCColor) * (100 - Transparent))) div 100;
DCColor := RGB (RPic, GPic, BPic);
SetPixel (DC, (XScreen + x), (YScreen + y), DCColor);
end;
end;
end;
DeleteDC (picDC);
DeleteObject (picture);
ReleaseDC (0, DC);
end;
Моя первая прога на WINAPI, если у кого есть идеи как это сделать проще, пожалуйста, напишите (не используя модуль graphics). В принципе это работает, но загружает проц, чего не хотелось бы. А как сделать то же самое с помощью BitBlt или TransparentBlt - ума не приложу. Спасибо.


Andre   (2003-07-13 02:19:00) [6]

Я имел ввиду заменить ScanLine(). Спасибо.


Andre   (2003-07-12 02:41:00) [7]

Я понял! Так у меня нет формы. Соответственно и AlphaBlend применять не к чему. А с BitBlt в компоненте много модулей используется. Нельзя ли обойтись только Messages и Windows?


Andre   (2003-07-08 03:32:00) [8]

С пониманием AlphaBlend трудновато, но всё равно спасибо. Попробуем разобраться.


Deus   (2003-07-07 14:30:00) [9]

AlphaBlend
The AlphaBlend function displays bitmaps that have transparent or semitransparent pixels.

Но это только под 2000/XP.

Под 9х можно только через BitBlt, как это сделано в компоненте Glassy:
http://www.utilmind.com/delphi2.html


Andre   (2003-07-06 02:16:00) [10]

Точнее. Я рисую прямо на экране(картинка в формате *.ICO) и надо чтобы она была прозрачной (сквозь неё был виден рабочий стол). Может подскажет кто-нибудь как это осуществить, в WIN API я ещё начинающий.


Nick Denry   (2003-07-05 20:13:00) [11]

точнее вопрос


Наверх

Титульная страница Поиск, карта сайта Написать письмо