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

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

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

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

.

非常感谢

【问题讨论】:

  • 这是一道编程题吗?为什么在标题中提到 C#?
  • 你是如何在 Photoshop 中裁剪的?

标签: c# .net image resolution crop


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多