【发布时间】:2013-09-21 05:29:05
【问题描述】:
我正在处理一个涉及裁剪图像的 winforms 项目。我的目标是通过使用固定大小的可拖动图片框控件来做到这一点,允许用户选择他们想要保留的区域。
我的问题是当我裁剪图像时;它“有效”,但裁剪区域偏移了一点。这是我得到的结果:
为了澄清,我不是在谈论缩放,这是每个设计。请注意,橙色框主要集中在风暴眼上,但裁剪后的图像不是。
这是我的裁剪操作代码:
private void tsbRecortar_Click(object sender, EventArgs e)
{
Rectangle recorte = new Rectangle(pbxSeleccion.Location.X, pbxSeleccion.Location.Y, pbxSeleccion.Width, pbxSeleccion.Height);
foto = recortarImagen(foto, recorte);
pbxImagen.Image = foto;
}
private Image recortarImagen(Image imagen, Rectangle recuadro)
{
try
{
Bitmap bitmap = new Bitmap(imagen);
Bitmap cropedBitmap = bitmap.Clone(recuadro, bitmap.PixelFormat);
return (Image)(cropedBitmap);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
return null;
}
}
pbxSeleccion 是可拖动的橙色矩形;它的父级是 pbxImage(我在表单加载时重新设置它的父级)。
如您所见,我使用 pbxSeleccion 的坐标来定义裁剪区域的起点,但没有按预期工作......有时,我什至会得到一个“Out内存”异常。
我认为这与图像在父图片框中的加载方式有关,与“幕后”如何处理边距有关,但我没有尝试修复它......只是改变了偏移量。
搜索网络和 SO 对我有很大帮助,但对于这个特定问题,我似乎找不到答案......请随时指出我的代码的改进,我没有编码很长一段时间,我是 C# 和 .NET 的新手
非常感谢任何帮助。干杯!
【问题讨论】:
标签: c# .net winforms image crop