Виждам някакво странно поведение с дробови ширини на писалката и се чудя дали някой може да обясни какво се случва. Рисуване на правоъгълник върху формуляр в отговор на събитие в Paint:
private void Form1_Paint(object sender, PaintEventArgs e)
{
const float width = 1.996093F;
Rectangle rectangle = new Rectangle(10, 10, 20, 20);
using (Pen pen = new Pen(Color.Black, width))
{
e.Graphics.DrawRectangle(pen, rectangle);
}
}
С ширина между 0 и 1.996093, получавам правоъгълник с ширина 1 пиксел. С ширина между 1.996094 и 2.003906 получавам правоъгълник с ширина 2 пиксела; от 2.003907 до 3.996093 получавам 3 пиксела и т.н. Още по-странно, с ширина 1.9960937, получавам правоъгълник, който е два пиксела широк на горния си ръб, и един пиксел широк на другите му ръбове.
Някой може ли да обясни какво се случва тук? Някак се надявах точките на прекъсване да са 1,5, 2,5, 3,5 и т.н.
Отговори:
0 за отговор № 1Трябва да видите, че проблемът отшумява, когато активирате анти-псевдоним за обекта Graphics, който рисувате, мисля.
Проблемът е вечен: Когато имате частично нарисувани пиксели, те ще са черни или бели? Резултатът зависи от алгоритъма и предположенията.
Въпреки че се чудя защо използвате дробниширина на пикселите изобщо, когато действително искате ясни и ясни широки линии с един или два пиксела. Можете лесно да закръгляте ширината си до цели числа и вече не виждате подобни проблеми.