2012-04-12 13 views
6

Ayúdeme con el canal alfa en HDC. Hago HDC dc throw CreateCompatibleDC. Luego llama a CreateDIBSection y puedes encontrar bytes de imagen en la memoria. Luego llama DrawFrameControl a esta dc. Todo funciona, pero en la memoria hay 4 bytes por píxel y el canal alfa se llena en 00. Incluso si antes había FF. Pero necesito un canal alfa ¿Cómo puedo hacer que DrawFrameControl establezca valores alpha reales o simplemente no los toque? Gracias. Y perdón por el inglés malo :(Canal alfa en DeviceContext (HDC)

Respuesta

7

No se puede hacer que GDI no escriba en el byte alfa/reservado de un mapa de bits de cuatro bytes por GDI. GDI no es realmente consciente de alfa, con la excepción de un par de funciones como AlphaBlend. Sin embargo, puede utilizar el conocimiento que se escribe y se restablece el alfa a 0 saber qué píxeles que escribió a, y fijar manualmente la alfa después.

para obtener más información, lea estos tres artículos:

Los dos primeros probablemente le dará suficiente información para lograr lo que quiere.

Estos artículos tienen un enfoque genérico para manejar alfa con funciones GDI, escaneando los píxeles donde el alfa fue eliminado y corrigiéndolo (y entra en técnicas más avanzadas para dibujar varias cosas una encima de la otra, con la alfa correcta.) FrameRect dibuja un rectángulo donde las líneas son de una unidad de ancho y alto. Puede que le resulte más eficiente dibujar líneas, o incluso editar directamente el mapa de bits de píxeles en la memoria, para dibujar líneas rectas en la memoria. Esto evita tener que escanear todo el mapa de bits en busca de píxeles dibujados con GDI. Después de todo, dado que es un rectángulo con bordes de una unidad de ancho, usted sabe exactamente a qué píxeles se acercará y puede editarlos usted mismo.

Cuestiones relacionadas