在我的程序中,我在listBox上执行了这项操作,当我选择项目时,我会看到右侧图片框中的屏幕截图。然后我可以在pictureBox上绘制一个矩形,点击一下按钮我可以裁剪矩形。问题是我需要在form1设计器SizeMode proprty中使pictureBox成为缩放或拉伸图像,如果不是当我选择一个项目时我看到pictureBox中的截图太大了。只有当它变焦或伸展时才会看到它很好。但是,当我裁剪矩形时,它不合适,我需要pictureBox sizemode为Normal。我该如何解决?
这是我的form1代码:
这是我选择和项目并显示它的图像的方式:
private void listBoxSnap_SelectedIndexChanged(object sender, EventArgs e)
{
WindowSnap snap = this.listBoxSnap.SelectedItem as WindowSnap;
selectedIndex = this.listBoxSnap.SelectedIndex.ToString();
this.pictureBoxSnap.Image = snap.Image;
for (int i = 0; i < rectangles.Length; i++)
{
if (rectangles[i] != RectClone)
{
ClearGraphics = false;
}
else
{
ClearGraphics = true;
}
}
}
这是油漆事件:
private void pictureBoxSnap_Paint(object sender, PaintEventArgs e)
{
if (pictureBoxSnap.Image != null)
{
{
if (ClearGraphics == false)
{
if (rectangles[listBoxSnap.SelectedIndex] != Rectangle.Empty)
{
e.Graphics.DrawRectangle(Pens.Firebrick, rectangles[listBoxSnap.SelectedIndex]);
}
}
if (cropRect == true)
{
if (recttest.Width > 10 && recttest.Height > 10)
{
e.Graphics.Clear(Color.White);
e.Graphics.DrawImage(pictureBoxSnap.Image, new Rectangle(rect.X, rect.Y, rect.Width, rect.Height), rect, GraphicsUnit.Pixel);
}
}
}
}
}
drawimage线绘制裁剪的矩形。
问题是如果SizeMode设置为Normal我看到好的裁剪矩形,但是当我选择一个项目剂量拟合图片框太大时,截图/图像。如果我将sizemode更改为zoom,我会看到所选项目图像不错,但裁剪后的图像不合适。
编辑:
当它设置为“正常”时,我看到矩形中的裁剪图像很好,但是所选项目的屏幕截图看起来像在图片框中放大非常大/宽。如果它设置为缩放我看到一个项目的图像好,但然后我绘制的矩形我看到里面的裁剪图像不是我标记的矩形,但更像是图像0,0区域部分。
这是我拍摄的4张图片的链接,并解释了每个图片盒尺寸模式是什么以及问题是什么。我无法在此处上传图片,因此我在facebook
中制作了一张相册答案 0 :(得分:0)
....
....
if (cropRect == true){
if (recttest.Width > 10 && recttest.Height > 10){
e.Graphics.FillRectangle(Brushes.White, 0, 0, pictureBoxSnap.Width, rect.Y);
e.Graphics.FillRectangle(Brushes.White, 0, rect.Y, rect.X, rect.Height);
e.Graphics.FillRectangle(Brushes.White, rect.X + rect.Width, rect.Y, pictureBoxSnap.Width - rect.X - rect.Width, rect.Height);
e.Graphics.FillRectangle(Brushes.White, 0, rect.Y + rect.Height, pictureBoxSnap.Width, pictureBoxSnap.Height - rect.Y - rect.Height);
}
}
或更好
private void pictureBoxSnap_Paint(object sender, PaintEventArgs e){
Point pnt;
....
....
if (cropRect == true){
if (recttest.Width > 10 && recttest.Height > 10){
pnt = PointToScreen(pictureBoxSnap.Location);
e.Graphics.Clear(Color.White);
e.Graphics.CopyFromScreen(pnt.X + rect.X, pnt.Y + rect.Y, rect.X, rect.Y, New Size(rect.Width, rect.Height));
}
}
瓦尔特