如何在不更改 C#.Net 中的分辨率的情况下裁剪图像?

Posted

技术标签:

【中文标题】如何在不更改 C#.Net 中的分辨率的情况下裁剪图像?【英文标题】:How can I crop image without changing its resolution in C#.Net? 【发布时间】:2009-05-13 10:14:58 【问题描述】:

我做了一个小程序,把大图分割,取一部分。 当我导入由“Microsoft Paint”制作的图像时,这个图像是“96 dpi”,所以我的程序运行良好。

但是我有 Photoshop 制作的图片,当我裁剪这些图片时,其分辨率为 71.6 dpi,新裁剪的图片采用 96 dpi 分辨率,因此它们之间的大小是不同的。

我想裁剪图片并保持其分辨率不变。

.

非常感谢

【问题讨论】:

这是一道编程题吗?为什么在标题中提到 C#? 你是如何在 Photoshop 中裁剪的? 【参考方案1】:

Bitmap.clone 可让您创建图像的裁剪副本,然后您可以将其保存。它不应该改变分辨率或任何东西(如果您在图像较小时放大更多的程序中打开图像,图像会看起来更大)。它不能用于扩展画布(您会出现内存不足错误)。因此,只需从文件中获取 Image,转换为 Bitmap,(system.drawing 命名空间)并将其克隆为更小,然后保存。

例子:

using System.Drawing;
//...
Bitmap x = (Bitmap) Image.FromFile(@"c:\tmp\food.png");
Image x2 = x.Clone(new Rectangle(25, 25, 50, 50), x.PixelFormat);
x2.Save(@"c:\tmp\food2.png");

【讨论】:

就是这样,非常感谢。 回头看,Bitmap 有一个构造函数,public Bitmap(string filename);。因此,强制转换 Image.FromFile 并不是绝对必要的。此外,using 语句可能会使这可以更好地处理资源清理。【参考方案2】:

DPI(每英寸点数)只是像素大小和介质大小之间的关系。如果您有一个 1024 x 768 像素的图像,则它是 1024 x 768。位图/二进制文件没有固有的 DPI。

如果您想在以 300 dpi 打印的打印机上打印该图像,那么您可以计算纸张上的尺寸,例如。

【讨论】:

告诉我什么:什么是大的(以像素为单位),什么是小的(以像素为单位)。如果您不知道像素,请告诉我您需要的英寸和 dpi。根据英寸和 dpi,您可以计算像素。 将这些信息也放入问题中可能会有所帮助。【参考方案3】:

Bitmap 类的 SetResolution() 方法允许您指定图像的分辨率。

见http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.setresolution.aspx

【讨论】:

以上是关于如何在不更改 C#.Net 中的分辨率的情况下裁剪图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响密码更改行为的情况下正确防止 ASP.NET Identity 2.2.1 中的多个活动会话?

如何在不裁剪的情况下查看矩形选框选定区域的大小?在 Photoshop CS 5 中

如何在不使用内部相机裁剪的情况下裁剪图像

使用 Python - 如何在不超过原始图像大小的情况下调整裁剪图像的大小以满足纵横比

如何在不使用 IDE 的情况下更改 C# 程序的图标?

如何在不裁剪的情况下调整新图像对象的大小?