![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прозрачный рисунок
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]
точнее вопрос