在C#中当使用
DrawImage
的时候,当我们需要绘制的空间大于图片本身,很可能出现图片出现渐变色的问题:
- 这是因为
DrawImage
默认是渐变拉伸,还有一种方式是平铺拉伸;
代码比较:
(1)使用之前的代码【出现渐变色问题】
public void DrawImage(Image image, Vector2[] points)
{
var offsettedPoints = PointsOffset(points); //进行点的格式的转变,从Vector2[]转换为PointF[]
Graphics.DrawImage(image, offsettedPoints);
}
(2)修改之后的代码:
public void DrawImage(Image image, Vector2[] points)
{
ImageAttributes ImgAtt = new ImageAttributes();
ImgAtt.SetWrapMode(WrapMode.TileFlipXY);
var offsettedPoints = PointsOffset(points);//进行点的格式的转变,从Vector2[]转换为PointF[]
Graphics.DrawImage(image, offsettedPoints, new Rectangle(new Point(0,0), image.Size), GraphicsUnit.Pixel, ImgAtt);
}
- 注意:
- 点的数组
offsettedPoints
是三个点组成,这三个结构定义一个平行四边形,分别是左上角、右上角和左下角,最后一个点是推测出的; new Rectangle(new Point(0,0), image.Size)
这部分代码是指定出image
中需要绘制出来的部分,这样,一张图片,我们可以指定哪个地方进行绘制;GraphicsUnit.Pixel
这个是一个枚举类型,指出度量的单位,这里单位是像素;ImgAtt
指出image 对象的重新着色和伽玛信息,这里是重点;
- 点的数组