GDI + .NET: LinearGradientBrush шире, чем 202 пикселя, вызывает цветное наложение - PullRequest
6 голосов
/ 05 ноября 2011

Если я нарисую прямоугольник шириной более 202 пикселей с помощью LinearGradientBrush, я получу цветную полосу слева:

enter image description here

Учитывая код для 202px широкого прямоугольника:

private void MainForm_Paint(object sender, PaintEventArgs e)
{
   Rectangle r = new Rectangle(50, 50, 202, 50);

   Color color1 = Color.FromArgb(unchecked((int)0xFF00024d));
   Color color2 = Color.FromArgb(unchecked((int)0xFFd6a20f));

   Brush b = new LinearGradientBrush(r, color1, color2, LinearGradientMode.Horizontal);
   e.Graphics.FillRectangle(b, r);
}

Я получаю прямоугольник, который рисует правильно:

enter image description here

Но если я изменю прямоугольник на 203 пикселей в ширину:

Rectangle r = new Rectangle(50, 50, 203, 50);

Прямоугольник имеет цветную полосу или обтекание слева:

enter image description here


Это также происходит в вертикальном направлении с LinearGradientMode.Vertical:

202px

enter image description here

203px

enter image description here

1 Ответ

11 голосов
/ 05 ноября 2011

Добавьте этот оператор перед вызовом FillRectangle ():

 e.Graphics.PixelOffsetMode = PixelOffsetMode.Half;

Это позволяет избежать неприятных проблем из-за ошибки округления с плавающей запятой.

...