Alpha blending en bitmap

Bruke AlphaBlend funksjon i DelphiAlpha blending brukes til å vise en alfa bitmap, som er abitmap som har gjennomsiktig eller semi-transparent pixels.In tillegg til rød, grønn og blå fargekanal, hver pixelin en alfa bitmap har en åpenhet komponenten kjent som sin alfakanal. Alfakanalen inneholder vanligvis så mange biter som en fargekanal. For eksempel kan en 8-bit alpha-kanal representerer 256 nivåer av åpenhet, fra 0 (hele bitmap er gjennomsiktig) til 255 (hele bitmap er ugjennomsiktig). Alpha blending mekanismer påkalles ved å ringe AlphaBlend funksjon. Den AlphaBlend funksjonen viser bitmaps som har gjennomsiktige eller delvis gjennomsiktige piksler. Det støttes ikke på Microsoft Windows 95 eller på versjoner av Microsoft Windows NT før Microsoft Windows 2000. Følgende kodeeksempel deler et vindu inn i tre horisontale områder. Deretter trekker det en alpha-blandet bitmap i hver av vinduet areas.const AC_SRC_ALPHA = $ 1; prosedyre DrawAlphaBlend (hWnd: HWND; hdcwnd: HDC); Var Ahdc: HDC; //Håndtaket på DC vi vil skape bf: BLENDFUNCTION; //Struktur for alpha blending Ahbitmap: HBITMAP; //Bitmap håndtak bmi: BITMAPINFO; //Bitmap header pvBits: pekeren; //Peker til DIB delen ulWindowWidth, ulWindowHeight: ULONG; //Vindu bredde /høyde ulBitmapWidth, ulBitmapHeight: ULONG; //Bitmap bredde /høyde rt: TRect; //Brukt for å få vinduet dimensionsbegin //få vinduet dimensjonene GetClientRect (HWND rt,); //Beregne vindu bredde /høyde ulWindowWidth: = rt.right - rt.left; ulWindowHeight: = rt.bottom - rt.top; //Sørge for at vi har minst noen vindusstørrelse if ((ulWindowWidth = 0) og (ulWindowHeight = 0)) og avslutter; //Dele vinduet inn i 3 horisontale områder ulWindowHeight: = AVKORT (ulWindowHeight /3); //Oppretter et DC for vår bitmap - kilden DC for AlphaBlend Ahdc: = CreateCompatibleDC (hdcwnd); //Null minnet for bitmap info ZeroMemory (bmi, sizeof (BITMAPINFO)); //Setup bitmap info bmi.bmiHeader.biSize: = sizeof (BITMAPINFOHEADER); bmi.bmiHeader.biWidth: = AVKORT (ulWindowWidth - (ulWindowWidth /5) * 2); ulBitmapWidth: = AVKORT (ulWindowWidth - (ulWindowWidth /5) * 2); bmi.bmiHeader.biHeight: = AVKORT (ulWindowHeight - (ulWindowHeight /5) * 2); ulBitmapHeight: = AVKORT (ulWindowHeight - (ulWindowHeight /5) * 2); bmi.bmiHeader.biPlanes: = 1; bmi.bmiHeader.biBitCount: = 32; //Fire 8-bit komponenter bmi.bmiHeader.biCompression: = BI_RGB; bmi.bmiHeader.biSizeImage: = ulBitmapWidth * ulBitmapHeight * 4; //Lage vår DIB seksjonen og velg bitmap inn i dc Ahbitmap: = CreateDIBSection (Ahdc, bmi, DIB_RGB_COLORS, pvBits, 0, 0); SelectObject (Ahdc, Ahbitmap); bf.BlendOp: = AC_SRC_OVER; bf.BlendFlags: = 0; bf.SourceConstantAlpha: = $ 7f; //Halvparten av 0xff = 50% gjennomsiktighet bf.AlphaFormat: = 0; //Ignorere kilde alfakanal AlphaBlend (hdcwnd, AVKORT (ulWindowWidth /5), AVKORT (ulWindowHeight /5), ulBitmapWidth, ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf); bf.BlendOp: = AC_SRC_OVER; bf.BlendFlags: = 0; bf.AlphaFormat: = AC_SRC_ALPHA; //Bruk kilde alpha bf.SourceConstantAlpha: = $ ff; //Ugjennomsiktig (deaktiver konstant alfa) AlphaBlend (hdcwnd, AVKORT (ulWindowWidth /5), AVKORT (ulWindowHeight /5 + ulWindowHeight), ulBitmapWidth, ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf); bf.BlendOp: = AC_SRC_OVER; bf.BlendFlags: = 0; bf.AlphaFormat: = 0; bf.SourceConstantAlpha: = $ 3A; AlphaBlend (hdcwnd, AVKORT (ulWindowWidth /5), AVKORT (ulWindowHeight /5 + 2 * ulWindowHeight), ulBitmapWidth, ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf); //Gjør opprydding DeleteObject (Ahbitmap); DeleteDC (Ahdc); end; Anmeldelser



Previous:
Next Page: