Aero: Como desenhar cores sólidas (opacas) no vidro?
Usando GDI + para desenhar várias cores:
brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
Você notará que nenhuma cor opaca aparece corretamente no vidro:
Como desenho cores sólidas no vidro?
Você também notará que uma cor totalmente opaca é tratada de maneira diferente, dependendo da cor:
preto opaco: totalmente transparentecor opaca: parcialmente transparentebranco opaco: totalmente opacoAlguém pode me indicar a documentação do compositor da área de trabalho que explica como as cores diferentes são manipuladas?
Atualização 3Você também notará queFillRectangle
se comporta de maneira diferenteFillEllipse
:
FillEllipse
com uma cor opaca desenha uma cor opacaFillRectangle
com uma cor opaca desenha parcialmente (ou totalmente) transparenteExplicação para comportamento não sensorial, por favor.
Atualização 4Sempre aprendendo sugerido que eu mude o modo de composição. DeMSDN:
Enumeração CompositingMode
oCompositingMode enumeração especifica como as cores renderizadas são combinadas com as cores de fundo. Essa enumeração é usada peloGraphics::GetCompositingMode
e'Graphics :: SetCompositingMode' métodos doGráficos classe.
CompositingModeSourceOver
Especifica que quando uma cor é renderizada, ela é combinada com a cor do plano de fundo. A mistura é determinada pelo componente alfa da cor que está sendo renderizada.
CompositingModeSourceCopy
Especifica que quando uma cor é renderizada, ela substitui a cor do plano de fundo. Este modo não pode ser usado junto com TextRenderingHintClearTypeGridFit.
A partir da descrição deCompositingModeSourceCopy
, parece que não é a opção que desejo. Das limitações que impõe, parece a opção que eu quero. E com a composição ou a transparência desativadanão é a opção que eu quero, uma vez que executa umaSourceCopy, ao invés deSourceBlend:
Felizmente, não é um mal que tenho que contemplar, porque não resolve o meu problema real. Depois de construir meugraphics
objeto, tentei alterar o modo de composição:
graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
O resultado não tem efeito na saída:
NotasNativo Win32não .NET (isto é nativo)não WinForms (isto é nativo)GDI + (isto é nativo)Veja tambémAero: Como desenhar texto ClearType em vidro?Windows Aero: De que cor pintar para fazer o "vidro" aparecer?Vista / 7: Como obter a cor do vidro?