Domanda

Ho un 24-bit bitmap con R, G, B canali di colore e un bitmap 24 bit con R, G, B canali alfa. Voglio alpha blend il primo bitmap a un HDC in GDI o RenderTarget in Direct2D con i canali alfa, rispettivamente. Ad esempio, si supponga che per un pixel, il colore bitmap è (192, 192, 192), il colore è HDC (0, 255, 255) ed i canali alfa sono (30, 40, 50). Il colore HDC finale dovrebbe essere (22, 245, 242). So che posso BitBlt la HDC una memoria HDC primo, fare alpha blending calcolando manualmente il colore di ciascun pixel e infine BitBlt indietro. Voglio solo evitare le API di copiarlo sul video e congedo supplementare fanno il loro lavoro (più veloce dal momento che sono nello spazio del kernel).

La prima idea viene in mente è quella di dividere la bitmap di origine in 3 Red sola, verde e blu solo solo 8 bit bitmap, fare normale alpha blending, quindi compositi 3 bitmap uscita nella HDC. Ma non trovo un modo per fare la scissione e la composizione in modo nativo in Windows (sarebbe Direct2D aiuto strato?). Inoltre, la scissione e compositing possono richiedere molti copia aggiuntiva. Il sovraccarico di prestazioni sarebbe troppo alto.

O forse fare l'alpha blending in 3 passaggi. Ogni passaggio applicare la fusione per un canale, mantenendo gli altri 2 invariata.

Grazie per qualsiasi commento.

EDIT: Ho trovato questo domanda , e la risposta dovrebbe essere buona riferimento a questo problema. Tuttavia, oltre AC_SRC_OVER, non v'è altra operazione di miscelazione supportato. Perché Microsoft non migliorano le loro API?

È stato utile?

Soluzione

Sono abbastanza sicuro che per-canale alfa non è supportata nelle librerie standard su Windows o OSX. Si potrebbe desiderare di lavoro con 3 strati in modo indipendente (trattare ogni livello come bitmap a 32 bit separata) e di comporli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top