裁剪图像无法正确裁剪

时间:2020-03-26 11:39:52

标签: c# .net winforms drawing

我遵循了YouTube教程,了解如何创建裁剪图像应用程序。

目标:

我的目标只是将屏幕截图图像加载到parking.observe(this, new Observer<List<Parking>>() { @Override public void onChanged(@Nullable List<Parking> parking){ } }); 中。

然后用红色矩形标记要裁剪的区域并显示到PictureBox1中。

以下是代码:

PictureBox2

输出:

这是输出输出:

在左侧-您可以看到屏幕截图输入,而在右侧-您可以看到裁剪的图像。

我不明白-红色标记的矩形不能正确裁剪图像? -它显示了屏幕截图图像的不同区域。

哪里出了问题?

Screenshot

2 个答案:

答案 0 :(得分:4)

Graphics的{​​{1}}事件中,使用一次性BitmapMouseUp对象的内存代替{em> flooding ,而处理{{1 }}事件,并使用受支持的PictureBox1对象进行绘制,只需使用Paint重载来传递源矩形和目标矩形。

PictureBox2

使用以下命令获取裁剪的图像:

Graphics

然后您可以将其保存为:

e.Graphics.DrawImage

SOQ60819266

答案 1 :(得分:0)

将SizeMode设置为Normal可能无法使用以下代码裁剪图像

//...
private Bitmap GetCroppedImage()
{
    var src = GetRect();

    if (src == Rectangle.Empty) return null;

    var des = new Rectangle(0, 0, src.Width, src.Height);
    var b = new Bitmap(src.Width, src.Height);

    using (var g = Graphics.FromImage(b))
    {
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.CompositingQuality = CompositingQuality.HighQuality;

        g.DrawImage(pictureBox1.Image, des, src, GraphicsUnit.Pixel);
    }
    return b;
}
//...

裁剪将相对于Picturebox的宽度和高度。

将新的位图行更改为以下

private void Save()
{
    using (var d = new SaveFileDialog())
    {
        d.Filter = "PNG|*.png|JPEG|*.jpeg;*.jpg|BMP|*.bmp";

        if (d.ShowDialog() != DialogResult.OK) return;

        using (var b = GetCroppedImage())
        {
            if (b == null) return;

            ImageFormat f;

            switch (d.FilterIndex)
            {
                case 2:
                    f = ImageFormat.Jpeg;
                    break;
                case 3:
                    f = ImageFormat.Bmp;
                    break;
                default:
                    f = ImageFormat.Png;
                    break;
            }

            b.Save(d.FileName, f);
        }
    }
}

或将图片框的SizeMode设置为StretchImage

=INDEX(COUNTIFS(Database!C:C; TRUE; LEN(Database!B:B); 17))