我的图像大于PictureEdit框问题,当使用鼠标创建矩形时,未选择图像上的正确点。它似乎是在PictureEdit中选择点而不是它自己的图像。我正在尝试裁剪图像并将裁剪后的图像放在新的Pictureedit中。示例代码如下。
private void originalPictureEdit_MouseDown(object sender, MouseEventArgs e)
{
//Point TextStartLocation = e.Location;
Cursor = Cursors.IBeam;
if (_drawStarted == false)
{
_drawStarted = true;
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
Cursor = Cursors.Cross;
_cropX = e.X;
_cropY = e.Y;
_selection = new Rectangle(new Point(e.X, e.Y), new Size());
_cropPen = new Pen(Color.Black, 1);
_cropPen.DashStyle = DashStyle.DashDotDot;
}
}
originalPictureEdit.Refresh();
}
private void originalPictureEdit_MouseMove(object sender, MouseEventArgs e)
{
if (originalPictureEdit.Image == null)
return;
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
originalPictureEdit.Refresh();
_selection.Width = e.X - _selection.X;
_selection.Height = e.Y - _selection.Y;
originalPictureEdit.CreateGraphics().DrawRectangle(_cropPen, _cropX, _cropY, _selection.Width, _selection.Height);
}
}
private void originalPictureEdit_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && _drawStarted && _selection.Size != new Size())
{
_croppedImage = (_displayedImage as Bitmap).Clone(_selection, _displayedImage.PixelFormat);
modifiedPictureEdit.Image = _croppedImage;
modifiedPictureEdit.Width = _croppedImage.Width;
modifiedPictureEdit.Height = _croppedImage.Height;
}
Cursor = Cursors.Default;
_drawStarted = false;
}
答案 0 :(得分:1)
我需要找到滚动条的位置。这是MouseUp的工作代码:
private void pictureEdit1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && _drawStarted && _selection.Size != new Size())
{
PictureEditViewInfo viewInfo = originalPictureEdit.GetViewInfo() as PictureEditViewInfo;
PropertyInfo pr = viewInfo.GetType().GetProperty("HScrollBarPosition", BindingFlags.Instance | BindingFlags.NonPublic);
int fHScrollBarPosition = (int)pr.GetValue(viewInfo, null);
pr = viewInfo.GetType().GetProperty("VScrollBarPosition", BindingFlags.Instance | BindingFlags.NonPublic);
int fVScrollBarPosition = (int)pr.GetValue(viewInfo, null);
_selection.X += fHScrollBarPosition;
_selection.Y += fVScrollBarPosition;
Crop();
}
Cursor = Cursors.Default;
_drawStarted = false;
}
答案 1 :(得分:0)
PictureEdit控件可以显示带偏移或缩放的图像,因此您应该在计算中接受这些因素。我相信以下方法可以帮助您:
PictureEditViewInfo viewInfo = GetViewInfo(originalPictureEdit);
Rectangle cropRect = new Rectangle(
_selection.X - viewInfo.PictureStartX,
_selection.Y - viewInfo.PictureStartY,
_selection.Width,
_selection.Height);
_croppedImage = (originalPictureEdit.Image as Bitmap).Clone(cropRect,
originalPictureEdit.Image.PixelFormat);
//...
static PictureEditViewInfo GetViewInfo(PictureEdit edit) {
PropertyInfo pInfo = typeof(BaseEdit).GetProperty("ViewInfo",
BindingFlags.Instance | BindingFlags.NonPublic);
return (PictureEditViewInfo)pInfo.GetValue(edit, new object[] { });
}
另外,我建议您使用以下内容替换pictureedit graphich上的直接绘图:
//...
Point frameLocation = originalPictureEdit.PointToScreen(_selection.Location);
ControlPaint.DrawReversibleFrame(
new Rectangle(frameLocation, _selection.Size), Color.Black, FrameStyle.Dashed);