Поведение связано с тем, как GDI + обрабатывает края.В этом случае вы масштабируете очень маленькое изображение на большой площади, и вы не сказали GDI +, как обрабатывать края.Если вы используете класс ImageAttributes
и правильно настроите WrapMode, вы можете обойти эту проблему.
Например:
private void Form1_Paint(object sender, PaintEventArgs e)
{
using (var resourceImg = new Bitmap(10, 10))
{
using (var g = Graphics.FromImage(resourceImg))
{
g.FillRectangle(Brushes.Black, 0, 0,
resourceImg.Width, resourceImg.Height);
}
var drawingArea = new Rectangle(0, 0, 200, 200);
e.Graphics.FillRectangle(Brushes.Aqua, drawingArea);
using (var attribs = new ImageAttributes())
{
attribs.SetWrapMode(WrapMode.TileFlipXY);
e.Graphics.DrawImage(resourceImg, drawingArea,
0, 0, resourceImg.Width, resourceImg.Height,
GraphicsUnit.Pixel, attribs);
}
}
}
Приведенный выше код должен создать полностью черное изображение.Если вы закомментируете оператор attribs.SetWrapMode(WrapMode.TileFlipXY);
, вы должны увидеть синий градиент.С установленным режимом обтекания вы говорите GDI + перевернуть изображение по краям, чтобы оно получало больше черного и не затухало на краях при масштабировании изображения.