c ++ - Tegning forbedret metafile med alfakanal ved hjælp af PlayEnhMetaFile

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at konvertere en forbedret metafile indeholdende transparente regioner til en 32 bit bitmap med kun GDI funktioner. Er det muligt at få korrekte alpha værdier?


Følgende fører til en 32 bit bitmap med alfa-værdien for hver pixel indstillet til 0:


Først opretter jeg en memory DC med CreateCompatibleDC(NULL) og en HBITMAP med CreateCompatibleBitmap ved hjælp af skærmbilledet DC hentet med GetDC(NULL). (Sidstnævnte producerer et håndtag til en 32 bit bitmap.)


Derefter vælger jeg den oprettede bitmap i hukommelsen DC ved hjælp af SelectObject.


Endelig tegner jeg en forstærket metafile indeholdende transparente regioner i hukommelsen DC ved hjælp af PlayEnhMetaFile.

Bedste reference


Jeg har ingen erfaring med PlayEnhMetaFile, men du kan tegne memory DCs med alfakanal med AlphaBlend


inline BOOL AlphaBlt(HDC hDC, int x, int y, int cx, int cy, HDC hSrcDC, int xSrc, int ySrc, int cxSrc, int cySrc)
{
    static BLENDFUNCTION bf = {AC\_SRC\_OVER, 0, 255, AC\_SRC\_ALPHA};
    return AlphaBlend(hDC, x, y, cx, cy, hSrcDC, xSrc, ySrc, cxSrc, cySrc, bf);
}


Håber det hjælper.