我正在按照链接进行图片剪裁和圆角处理。但是它并不按照我想要的方式工作。我花了一些时间,但是还没有明白在哪里修改代码才能得到我想要的结果。
我想在给定位置下方展示图片,并将其置于图片中央,具体操作如下: 但是目前当我改变X,Y坐标时,裁剪后的图像会移动,我希望圆形图像仍然位于中心。
public Image CropToCircle(Image srcImage, PointF center, float radius, Color backGround)
{
Image dstImage = new Bitmap((int)Math.Round(Math.Ceiling(radius*2)), (int)Math.Round(Math.Ceiling(radius*2)), srcImage.PixelFormat);
using (Graphics g = Graphics.FromImage(dstImage))
{
RectangleF r = new RectangleF(center.X - radius, center.Y - radius, 2*radius, 2 * radius);
using (Brush br = new SolidBrush(backGround))
{
g.FillRectangle(br, 0, 0, dstImage.Width, dstImage.Height);
}
GraphicsPath path = new GraphicsPath();
path.AddEllipse(r);
g.SetClip(path);
g.DrawImage(srcImage, 0, 0);
return dstImage;
}
}
dstImage - 应该在给定的光标位置显示从主图像中裁剪出来的图像。
以上代码工作良好,但输出图像位置随着 X、Y 坐标移动。我想要的是始终在光标位置下方显示 100x100 的正方形图像。(就像镜头在图像上移动一样)
这是我调用函数的方式
private void drawWindows(Point mousePoint)
{
Image RoundedImage = CropToCircle(StartImage, new PointF(mousePoint.X, mousePoint.Y), 75, Color.FromArgb(0, 101, 167));
PB.Image = RoundedImage;
}
我想在给定位置下方展示图片,并将其置于图片中央,具体操作如下: 但是目前当我改变X,Y坐标时,裁剪后的图像会移动,我希望圆形图像仍然位于中心。
我在哪里犯了错?我感觉 g.DrawImage(srcImage, 0, 0)
很可能是罪魁祸首。
有什么想法吗?