为什么被裁剪的矩形不适合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上做了一个相册

为什么被裁剪的矩形不适合pictureBox的大小模式

....
....
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));
        }
    }

瓦尔特