【问题标题】:Saving inside of rectangle in picturebox在图片框中保存矩形内部
【发布时间】:2011-08-23 18:24:28
【问题描述】:

我有类似的东西 - 图像从文件加载到图片框1:

然后按下“SelectArea”按钮后,我可以在加载的图片上绘制矩形:

最后在按下另一个按钮“SaveArea”后,我想将 img 保存在创建的矩形内,因此我会将图像保存在我的驱动器上,如下所示:

如何编写代码来帮助我完成最后一步 -> 保存在矩形内?

Tnx.

【问题讨论】:

    标签: c# winforms picturebox


    【解决方案1】:

    首先新建一个具有正确尺寸的位图

    然后您使用Graphics.FromImage为此创建一个图形对象,然后在生成的图形对象上使用DrawImage 方法将您的大图像的一部分绘制到位图上。

    最后用 Save 保存位图对象:

    public static void SaveBitmapPart(System.Drawing.Image image, System.Drawing.RectangleF sourceRect, string pathToSave )
    {
        using (var bmp = new System.Drawing.Bitmap((int)sourceRect.Width, (int)sourceRect.Height))
        {
            using (var graphics = System.Drawing.Graphics.FromImage(bmp))
            {
                graphics.DrawImage(image, 0.0f, 0.0f, sourceRect, System.Drawing.GraphicsUnit.Pixel);
            }
            bmp.Save(pathToSave);
        }
    }
    

    所以只需调用它:

    SaveBitmapPart(picturebox1.Image, myRectangle, @"c:\Temp\Test.bmp");
    

    【讨论】:

    • PS 你可以使用 PictureBoxes-Image 属性作为这个小函数的“图像”(第一个参数)。
    • Tnx,但我还是有问题。当我在图片框上选择矩形 - 640x480,例如矩形 (300x300) 时,我保存的图片是 300x300,但矩形内部的所有内容都在左上角并且没有拉伸 - 就像矩形内部的微图像一样。
    • 您没有写任何关于拉伸图像的内容,也没有建议您的示例 - 无论如何这很容易 - 只需将 DrawImage-Method 更改为可以处理图像拉伸的重载(只需查看 MSDN文档 - 非常好) - 当然你也必须为你想要的大小提供位图)
    • 我没有写它是因为我不想这样做。我会尝试更好地解释问题;)您的解决方案有效。我选择了 640x480 的矩形 - 它的大小为 picturebox1。我得到的结果为picture1.jpg,参数为640x480。里面有我的图片100x100的正方形,图片的其余部分是空白区域。这是 100x100 的屏幕,来自 640x480,但它更小......就像它没有正确缩放一样。
    • 好的 - 问题出在 System.Drawing.Bitmap 分辨率上,默认为 = 96 dpi。
    猜你喜欢
    • 2015-07-11
    • 2018-10-23
    • 1970-01-01
    • 2015-01-18
    • 2013-03-17
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多