在 C# 中正确裁剪图像并将其缩放到 1024 x 768 分辨率

Posted

技术标签:

【中文标题】在 C# 中正确裁剪图像并将其缩放到 1024 x 768 分辨率【英文标题】:Cropping images in C# properly and scaling it up to 1024 x 768 resolution 【发布时间】:2016-12-29 19:17:04 【问题描述】:

我在 .NET 应用程序中设置了一个功能,我将 4 个值传递给后面的代码,如下所示:

X1 - X axis value
Y1 - Y axis value
W1 - selected width  
H1 - Represents the selected height of the image

我正在尝试实现一个功能,使我能够像以下那样进行裁剪。例如,这是输入图像:

所需的输出如下所示:

红色矩形代表裁剪区域。

我正在使用如下代码:

  Rectangle cropRect = new Rectangle(Convert.ToInt32(X1.Value), Convert.ToInt32(Y1.Value), Convert.ToInt32(W1.Value), Convert.ToInt32(H1.Value));
                Bitmap src = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream) as Bitmap;
                Bitmap target = new Bitmap(cropRect.Width, cropRect.Height);

                using (Graphics g = Graphics.FromImage(target))
                
                    g.DrawImage(src, new Rectangle(0, 0, target.Width, target.Height),
                                     cropRect,
                                     GraphicsUnit.Pixel);
                    src.Save(Server.MapPath("/users/images/") + fileName);

                

但这对图像没有任何作用,它只是保存我首先上传的内容......我在这里做错了什么?

编辑:这就是使用 targer.Save();

这远不是我想要的:/

【问题讨论】:

你不应该做target.Save()而不是src.Save()吗?此外,您可能需要将target.Save() 移出using (Graphics g...) 语句。 @dbc 好的,我确实像你说的那样,但裁剪区域与我选择的位置相去甚远。一秒钟后我会发布一张裁剪后的图片 任何人,伙计们??? 这样的? ***.com/questions/8992619/… 使用target.Save 对我有用。你的输入值是多少?我正在使用X1 = 268, Y1 = 240, W1 = 587, H1 = 457 【参考方案1】:

当您想调用 target.Save 时,您似乎在调用 src.Save。

【讨论】:

好吧,我确实像你说的那样,但裁剪区域与我选择的位置相去甚远。一秒钟后我会发布一张裁剪后的图片

以上是关于在 C# 中正确裁剪图像并将其缩放到 1024 x 768 分辨率的主要内容,如果未能解决你的问题,请参考以下文章

PictureBox处于“缩放”模式时裁剪图像的正确部分[重复]

SwiftUI - 缩放、缩放和裁剪图像

Android 位图平移/缩放/裁剪

在 UIScrollView 问题中裁剪缩放图像

裁剪图像并将其分层在第二个 canvas-imagemagick 中的某个位置

扫描图像并将其像 pdf 一样保存到数据库 c#