Форум: "WinAPI";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизПрозрачный рисунок Найти похожие ветки
← →
Andre (2003-07-05 03:28) [0]Всем привет. Такой вот вопрос: как с помощью API сделать .ICO прозрачной (или .BMP)?
← →
Nick Denry (2003-07-05 20:13) [1]точнее вопрос
← →
Andre (2003-07-06 02:16) [2]Точнее. Я рисую прямо на экране(картинка в формате *.ICO) и надо чтобы она была прозрачной (сквозь неё был виден рабочий стол). Может подскажет кто-нибудь как это осуществить, в WIN API я ещё начинающий.
← →
Deus (2003-07-07 14:30) [3]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-08 03:32) [4]С пониманием AlphaBlend трудновато, но всё равно спасибо. Попробуем разобраться.
← →
Andre (2003-07-12 02:41) [5]Я понял! Так у меня нет формы. Соответственно и AlphaBlend применять не к чему. А с BitBlt в компоненте много модулей используется. Нельзя ли обойтись только Messages и Windows?
← →
Andre (2003-07-13 02:19) [6]Я имел ввиду заменить ScanLine(). Спасибо.
← →
Andre (2003-07-16 04:47) [7]А я сделал так:
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 - ума не приложу. Спасибо.
← →
Rouse_ (2003-07-16 06:20) [8]Поясни фразу "Я рисую прямо на экране"
На рабочем столе?
Если я прав.....
Желаю успехов
← →
Th (2003-07-16 19:30) [9]to Andre см. в MSDN функцию AlphaBlend
← →
Andre (2003-07-19 02:48) [10]
> Rouse_ © ( поверх всех окон)
> Rouse_ ©
> Поясни фразу "Я рисую прямо на экране"
>
> На рабочем столе?
Да, прямо на рабочем столе (поверх всех окон).
← →
Andre (2003-07-20 02:21) [11]С AlphaBlend пошло всё неплохо, но необходимо как-то убрать цвет фона (сделать его абсолютно прозрачным). Подумаю на досуге.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c