为什么被裁剪的矩形不适合pictureBox的大小模式
本文关键字:pictureBox 模式 不适合 裁剪 为什么 | 更新日期: 2023-09-27 18:19:08
在我的程序中,我在listBox上这样做了,当我选择一个项目时,我在右侧的图片框中看到一个屏幕截图图像。然后我可以在pictureBox上画一个矩形,然后点击一个按钮,我可以裁剪这个矩形。问题是,我需要使在form1设计师SizeMode属性的pictureBox缩放或拉伸图像,如果不是当我选择一个项目,我看到在pictureBox屏幕截图太大。只有当它是缩放或拉伸,我认为它很好。但是当我裁剪矩形时,它不适合,我需要pictureBox的大小模式为Normal。
这是我的form1代码:Form1.cs
这是我如何选择和项目,并显示它的图像:
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;
}
}
}
这是paint事件:
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设置为正常,我看到很好的裁剪矩形,但是当我选择一个项目时,屏幕截图/图像不适合太大的pictureBox。如果我改变大小模式为缩放,我看到选中的项目图像很好,但裁剪的图像不适合。
编辑:
当它设置为Normal时,我看到矩形中裁剪的图像很好,但是选中项目的截图看起来像在pictureBox中放大得很大/很宽。如果它设置为缩放,我看到一个项目的图像很好,但然后我画的矩形,我看到裁切的图像里面不是我用矩形标记的,而是更像图像0,0区域部分。
这是我拍摄的4张图片的链接,并解释了图片框的大小模式是什么,问题是什么。我不能上传这里的图片所以我在facebook上做了一个相册
....
....
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));
}
}
瓦尔特