Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Transparent BITMAP   Найти похожие ветки 

 
юзверь   (2004-07-25 20:46) [0]

подскажите плиз как заставиль BMPши просвечиваться, шоб розового небыло, как подставить цвет шоб оно прозрачность дуплило?
картинки находяться на кнопках на тулбаре

..
toolbarHWND := CreateWindowEx(0, TOOLBARCLASSNAME, nil,
WS_CHILD or WS_VISIBLE or TBSTYLE_TRANSPARENT or TBSTYLE_FLAT or TBSTYLE_TOOLTIPS or CCS_NODIVIDER or CCS_ADJUSTABLE or CCS_NOPARENTALIGN or CCS_NORESIZE,
0, 0, 0, 0, barhWnd, 0, hInstance, nil);
..
tbab.hInst := 0;
tbab.nID   := loadbitmap(hInstance, "BITMAP_24");
SendMessage(toolbarHWND, TB_ADDBITMAP, wParam(4), lParam(@tbab));


 
parovoZZ ©   (2004-07-25 21:44) [1]

Я делал так:


procedure DrawOnScreen (PictureDC : HDC; Width, Height : Integer);
var
DC, Alpha_DC, Mask_DC     : HDC;
XScreen, YScreen          : Integer; //
Alpha_Bitmap, Mask_Bitmap : HBitmap;
Transparent               : Cardinal; //
bf                        : BlendFunction;

begin
   DC := GetDC (0); //
   Randomize;
   XScreen := Random (GetSystemMetrics (SM_CXSCREEN)) - Trunc (Width/2);//
   YScreen := Random (GetSystemMetrics (SM_CYSCREEN)) - Trunc (Height/2);//êóäà áóäåì ðèñîâàòü êàðòèíêó
   Transparent := GetPixel (PictureDC, 0, 0);//Определяем прозрачный увет

   Alpha_DC := CreateCompatibleDC (DC);
   Mask_DC := CreateCompatibleDC (DC);

   Alpha_Bitmap := CreateCompatibleBitmap (DC, Width, Height);
   Mask_Bitmap := CreateBitmap (Width, Height, 1, 1, nil);

   SelectObject (Alpha_DC, Alpha_Bitmap);
   SelectObject (Mask_DC, Mask_Bitmap);

   BitBlt (Alpha_DC, 0, 0, Width, Height, DC, XScreen, YScreen, SRCCOPY);

   bf.AlphaFormat := 0;
   bf.BlendFlags := 0;
   bf.BlendOp := AC_SRC_OVER;
   bf.SourceConstantAlpha := Random (250);//Уровень прозрачности
   AlphaBlend (Alpha_DC, 0, 0, Width, Height, PictureDC, 0, 0, Width, Height, bf);

   SetBkColor (PictureDC, transparent);

   BitBlt (Mask_DC, 0, 0, Width, Height, PictureDC, 0, 0, SRCCOPY);
   BitBlt (Alpha_DC, 0, 0, Width, Height, Mask_DC, 0, 0, SRCPAINT);

   TransparentBlt (DC, XScreen, YScreen, Width, Height, Alpha_DC, 0, 0, Width, Height, $00FFFFFF);

   DeleteObject (Alpha_Bitmap);
   DeleteObject (Mask_Bitmap);

   DeleteDC (Alpha_DC);
   DeleteDC (Mask_DC);

   ReleaseDC (0, DC);
end;


Сперва создаём чёрно-белую картинку, затем на неё копируем цветную. Причём цвет, установленный SetBkColor, становится белым, а всё остальное чёрным. По этой маске TransparentBlt (в 98-ой говорят не работает...проверял...всё пашает. Почему-тА) отсекает ненужный нам фон, а AlphaBlend делает её полупрозрачной.


 
юзверь   (2004-07-25 22:29) [2]

10х
попробую, мне наверно полегче надо, просто шоб орубало лишнее а не полу прозрачным, я уже пробовал с TransparentBlt но шото у мя криво торчит наверно :)



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
3-1092899727
Uran
2004-08-19 11:15
2004.09.12
Проблеммы с кодировкой


1-1092302454
GrayFace
2004-08-12 13:20
2004.09.12
Алгоритмы сортировки


14-1093455128
Ertong
2004-08-25 21:32
2004.09.12
Процесс System


1-1093920636
DEMs
2004-08-31 06:50
2004.09.12
Запуск через консоль


3-1092476621
leonon
2004-08-14 13:43
2004.09.12
FastReport - как программно связать TfrQuery c базой приложения?