Me refiero a la respuesta de Phil anterior (esto es realmente un comentario, pero no tengo ese privilegio). El comportamiento veo es contrario a the documentation, que dice:
línea La partida es perpendicular a la línea de orientación y pasa a través de una de las esquinas del rectángulo. Todos los puntos en la línea de partida son el color inicial. Entonces, la línea final es perpendicular a la línea de orientación y pasa a través de una de las esquinas del rectángulo. Todos los puntos en la línea final son el color final.
En algunos casos, obtendrá un ajuste de un solo píxel. Por lo que puedo decir (por experimentación) solo obtengo el problema cuando el ancho o alto del rectángulo es impar. Así que para evitar el error, creo que es adecuado aumentar el rectángulo LinearGradientBrush en 1 píxel si y solo si la dimensión (antes de la expansión) es un número impar. En otras palabras, siempre redondee el rectángulo del pincel hasta el siguiente número par de píxeles en ancho y alto.
Así que para llenar un rectángulo r
utilizo algo como:
Rectangle gradientRect = r;
if (r.Width % 2 == 1)
{
gradientRect.Width += 1;
}
if (r.Height % 2 == 1)
{
gradientRect.Height += 1;
}
var lgb = new LinearGradientBrush(gradientRect, startCol, endCol, angle);
graphics.FillRectangle(lgb, r);
insana pero cierto.
impresionante, por lo que ahora aparece por primera vez para la mayoría de mis búsquedas wtf :) –
estado tomando el pelo hacia fuera sobre esto durante una hora – Antony