2012-06-10 37 views
5

¿Cómo se dibuja un rectángulo azul con un valor alfa/transparencia de 0,5 (es decir, 50% de transparencia) en Native Win32 C++?Dibujar rectángulo azul ligeramente transparente en Win32 GDI nativo

El uso de una macro como RGBA() falla, no estoy seguro de cómo puedo especificar el valor alfa del pincel.

SetDCPenColor(hdc, RGBA(255,255,0,127)); 
SetDCBrushColor(hdc, RGBA(255,255,0,127)); 
Rectangle(hdc, 0, 0, width, height); 

Respuesta

6

Estoy bastante seguro de que necesita GDI+ hacerlo así, pero debería estar allí con GDI:

//in rendering function 
using namespace Gdiplus; 
Graphics g (hdc); 
SolidBrush brush (Color (127 /*A*/, 0 /*R*/, 0 /*G*/, 255 /*B*/)); 
g.FillRectangle (&brush, 0, 0, width, height); 

En el lado positivo, GDI +, aunque no tan rápido , tiene mayores capacidades y resultados visuales, y está orientado a objetos, lo que significa que no necesita preocuparse por todas esas llamadas SelectObject y DeleteObject.

Tenga en cuenta que hay un par de extra steps al inicializar/final del programa con el fin de utilizar GDI +, y que todo está en el espacio de nombres Gdiplus, y -lgdiplus.

Si realmente necesita GDI, la única solución que conozco es AlphaBlend, que en realidad es un método más complejo que simplemente dibujar formas en el contexto del dispositivo. Siempre es bueno comenzar con GDI +, ya que todavía está en uso, y es mucho más fácil de usar que GDI.

+0

No creo que GDI + ¿No es más rápido que GDI es? GDI está acelerado por hardware, pero no así para GDI + (por lo que he leído). –

+0

@SethCarnegie, no he leído demasiado, pero recuerdo que era más rápido. Al mirarlo, parece que tienes razón. GDI + todavía tiene más capacidad y produce mejores imágenes. Si realmente te preocupa la velocidad (y la calidad al mismo tiempo), DirectX es un candidato extremadamente bueno. – chris

+0

Sí, no hay duda de que GDI + produce mejores imágenes y tiene más capacidad. +1. –

Cuestiones relacionadas