2010-04-06 6 views
5

me gustaría dibujar una barra de progreso con el porcentaje en su centro, pero me gustaría el textotener negativo (contrastado) color del fondo .Dibujar texto en un control de .NET con el color negativo del fondo - se mezclan

De modo que la parte del texto que está sobre la porción rellena de ProgressBar sería blanca y la parte sobre la que no se rellenaría sería blanca.

que podía hacer esto simplemente mediante la "trampa"

  • pintar el negro parte del texto primero
  • pintura rectángulo progreso (que cubriría la pieza que se oculta)
  • pintura el blanco texto sobre el rectángulo progreso solamente (encajándolo)

el perfor El impacto de pintar el texto dos veces es insignificante en esta aplicación, pero me interesa si hay alguna manera simple de hacerlo en dos pasos solamente (como tener la barra de progreso de alguna manera invertir el texto ya pintado) con combinando.

+0

¿Cómo se recorta el texto en blanco? – farukdgn

+0

@farukdgn 'graphicsObj.Clip = new Region (rectangle);' - esto restringe el dibujo en el objeto 'Graphics' al área del' Rectangle' que ha establecido. – domi1819

Respuesta

4

Lo que estás haciendo está bien. Los viejos trucos como SetROP2() ya no funcionan y el texto se suaviza, especialmente con el renderizado ClearType. Obtener los píxeles de aliasing con el color incorrecto es muy notable. Graphics.CompositingMode en consecuencia ya no admite los efectos.

0

Puede usar XOR para calcular el color negativo (invertido);

Public Function InvertColor(color As Long) As Long 
    Return (color Xor &HFFFFFF) 
End Function 
+0

Eso no es problema, conozco la base y el color invertido, pero estoy preguntando sobre cómo hacer la mezcla "XOR" en gráficos – Axarydax

Cuestiones relacionadas