Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Кое-что о прозрачности окон   Найти похожие ветки 

 
onyx   (2004-11-03 13:16) [0]

Вот нашел в старых форумах:

Круглое/овальное/с дыркой/etc -- это не прозрачность. Прозрачность
делается не так.
Вот формула для смешения цветов:

R=(Rфона*Alpha+(100-Alpha)*Rформы*Alpha)/100;
G=(Gфона*Alpha+(100-Alpha)*Gформы*Alpha)/100;
B=(Bфона*Alpha+(100-Alpha)*Bформы*Alpha)/100;
где Alpha - коэффициент прозрачности в %

Перед показом формы, создаём битмап, что под формой будет и для формы делаем
смешение цветов для пикселов из битмапа и битмапа формы.


Например, засовываем то, что под окном в bitmap:

 RECT r;
 GetWindowRect(hwnd, &r);
 int w= r.right-r.left;
 int h= r.bottom-r.top;

 HDC hdcScreen= GetDC(0);
 HDC hdcCompatible = CreateCompatibleDC(hdcScreen);  
 //Create a compatible bitmap for hdcScreen.  
 HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen, w, h);
 SelectObject(hdcCompatible, hbmScreen);
 ShowWindow(hwnd, SW_HIDE);
 BitBlt(hdcCompatible, 0, 0,  w, h, hdcScreen, r.left, r.top, SRCCOPY);  
 ShowWindow(hwnd, SW_SHOW);

Вопрос: как смешать цвета по вышеуказанным формулам и вывести получившееся вместо окна?


 
onyx   (2004-11-03 15:32) [1]

Неужели никто не знает, или просто лень ответить...


 
DVM ©   (2004-11-04 19:47) [2]

Нужны два цикла. Перебираешь пиксели (getpixel) и цвет пикселей смешиваешь. Потом  setpixel. Только картину под окном получить невозможно по-нормальному. ИМХО на королевстве делфи есть статья. Сорри за немногословнось - пишу с PocketPC.


 
Wiz@rd   (2004-11-04 20:21) [3]

Да формула такая, вот как битмапы смешиваются, дальше думай сам, получай dc окон и т.п.:

type
 TPercent = 0..100;

procedure Blend (dstBitmap, srcBitmap: TBitmap; Transparency: TPercent);
const
 MaxPixelCount = 32768;
type
 PRGBTripleArray = ^TRGBTripleArray;
 TRGBTripleArray = array[0..MaxPixelCount] of TRGBTriple;
var
 dstRow, srcRow: PRGBTripleArray;
 x, y: Integer;
begin
 dstBitmap.PixelFormat := pf24bit;
 srcBitmap.PixelFormat := pf24bit;
 for y := 0 to srcBitmap.Height-1 do
 begin
   srcRow := srcBitmap.ScanLine[y];
   dstRow := dstBitmap.ScanLine[y];
   for x := 0 to srcBitmap.Width-1 do
   begin
     dstRow[x].rgbtRed := ((100-Transparency) * dstRow[X].rgbtRed) div 100 +
                           (Transparency * srcRow[X].rgbtRed) div 100;
     dstRow[x].rgbtGreen := ((100-Transparency) * dstRow[X].rgbtGreen) div 100 +
                           (Transparency * srcRow[X].rgbtGreen) div 100;
     dstRow[x].rgbtBlue := ((100-Transparency) * dstRow[X].rgbtBlue) div 100 +
                           (Transparency * srcRow[X].rgbtBlue) div 100;
   end;
 end;
end;



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

Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.043 c
11-1084189550
Yustas
2004-05-10 15:45
2004.12.19
Иконка приложения


3-1100789231
turonix
2004-11-18 17:47
2004.12.19
Как послать запрос в DB FireBird используя компонент pFIBQuary?


14-1101713889
uw
2004-11-29 10:38
2004.12.19
Порнуха лезет


1-1102310570
SeZuka
2004-12-06 08:22
2004.12.19
Создание/изменение файла


1-1101844886
Fido24
2004-11-30 23:01
2004.12.19
Как отключить Popup-меню в компоненте?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский