Tôi sẽ đánh giá cao câu trả lời của Phil ở trên (đây thực sự là nhận xét nhưng tôi không có đặc quyền đó). Các hành vi tôi thấy là trái với the documentation, mà nói:
dòng sự khởi đầu vuông góc với đường định hướng và đi qua một trong các góc của hình chữ nhật. Tất cả các điểm trên vạch xuất phát là màu bắt đầu. Sau đó, dòng kết thúc vuông góc với đường định hướng và đi qua một trong các góc của hình chữ nhật. Tất cả các điểm trên dòng kết thúc là màu kết thúc.
Cụ thể là bạn nhận được một điểm ảnh xung quanh một điểm ảnh trong một số trường hợp. Theo như tôi có thể nói (bằng cách thử nghiệm) tôi chỉ nhận được vấn đề khi chiều rộng hoặc chiều cao của hình chữ nhật là lẻ. Vì vậy, để làm việc xung quanh các lỗi tôi thấy nó là đủ để tăng hình chữ nhật LinearGradientBrush 1 pixel nếu và chỉ khi kích thước (trước khi mở rộng) là một số lẻ. Nói cách khác, luôn luôn làm tròn hình chữ nhật cọ lên số lượng pixel thậm chí tiếp theo ở cả chiều rộng và chiều cao.
Vì vậy, để điền vào một hình chữ nhật r
tôi sử dụng một cái gì đó như:
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);
Insane nhưng là sự thật.
Nguồn
2012-12-05 17:42:52
Awesome, vì vậy bây giờ đi lên đầu tiên đối với hầu hết các tìm kiếm wtf của tôi :) –
Được kéo tóc của tôi ra trên này cho một giờ tốt – Antony