【问题标题】:How can I resize an image in C# while retaining high quality?如何在保持高质量的同时在 C# 中调整图像大小?
【发布时间】:2011-06-23 22:21:40
【问题描述】:

我从这里找到了一篇关于图像处理的文章:http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing 一切正常。

我想在调整图像大小时保持高质量。我想如果我可以增加 DPI 值,我可以做到这一点。有谁知道这是否可能?如果是这样,我该如何在 C# 中实现它?

【问题讨论】:

标签: c# .net image-processing image-resizing


【解决方案1】:

首先,值得指出的是图像有两种一般类别;向量[例如SVG、WMF、Adobe Illustrator 和 Corel Draw Graphics] 和位图(也称为光栅)图像 [e.g.位图、JPEG 和 PNG 图像]。

矢量图像由一系列数学方程式和/或计算形成。另一方面,位图图像由单独的点(像素)组成,每个点对应于拍摄图像的对象上的特定特征。

如果您想调整图像大小,首先要考虑的是它是位图还是矢量图像。由于矢量图像是从计算中获得的,因此它们可以完美地调整大小而不会丢失任何细节。位图图像的情况不同。由于每个像素相互独立,因此当您想要调整它的大小时,您只需增加或减少源与目标像素的比率。

因此,为了将矢量图像的大小加倍,只需将目标尺寸乘以 2,一切都会好起来的。如果您应该在位图上应用相同的效果,您实际上是在增加每个源像素以覆盖四个像素(两行两个水平像素)。

当然,通过应用插值和过滤,计算机可以“平滑”出目标像素的边缘,使它们看起来相互融合,并呈现出合理调整大小的图像的外观,但这种输出与调整矢量图像的大小;矢量图像完美调整大小。

您在问题中还提到了 DPI。 DPI 本质上是图像打印而不是在屏幕上查看时对应于一英寸的像素数。因此,通过增加图像的 DPI,您不会增加屏幕上图像的大小。您只会提高打印质量[不用说取决于打印机的最大分辨率]。

如果您真的想调整图像的大小并且图像是位图,根据经验,不要将大小增加到原始图像大小的 200% 以上,否则您会失去质量。

您可以查看this answer 获取调整位图图像大小的代码。

要查看示例矢量图像,请转至this link
注意尝试放大和缩小图像以查看其调整大小的效果。

典型的位图是StackOverflow sprites。他们不保持他们的质量调整大小。


进一步阅读

【讨论】:

    【解决方案2】:

    如果原始图像比调整大小的图像小,那么您几乎无能为力。休息是一个研究问题。

    【讨论】:

      【解决方案3】:

      只有当它是矢量图形时才有可能。查看 SVG。否则,我认为您可能需要 Silverlight 或 Flex。

      【讨论】:

        【解决方案4】:

        你问的是不可能的。您无法在保持相同质量的同时放大图像。
        如果您将图像视为像素的映射数组(字面意思是“位图”),这是有道理的。图像与固定数量的数据一起保存,当您调整它的大小时,这就是您所要做的一切。任何相反的例子(如电视节目,正如其中一位 cmets 所建议的那样)纯属虚构。

        您可以做的最好的事情是将您用于调整大小的Graphics 对象的InterpolationMode property 设置为“HighQualityBicubic”,这是 GDI+ 支持的最高质量平滑算法,实际上每个专业都支持市场上的图形包。它甚至是 Adob​​e Photoshop 所能提供的最好的。从本质上讲,插值意味着计算机正在计算您要添加的新像素的近似值,以使图像相对于相邻像素的相对值更大。这是一种“最佳猜测”方法,但它是我们迄今为止提出的最佳折衷方案。
        至少,生成的图像不会有“锯齿”或粗糙的像素化线条。

        示例代码:

        Graphics g;
        g.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        // ... insert the rest of your code here
        

        除此之外,值得注意的是 GDI+(.NET Framework 内部用于图形例程)最适合 16 的倍数的图像大小。因此,如果可能的话,您应该尝试将宽度和高度设置为您调整大小的图像是 16 的倍数。这将尽可能多地保留原始图像质量。

        理想的解决方案是切换到可以随意调整大小的矢量图形。它们包含用于绘制或“渲染”图像的数学信息,而不是像素信息。阅读更多Wikipedia

        【讨论】:

          【解决方案5】:

          让我们试试 GDI+ 中的元数据,也许它可以满足您的要求

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-01-09
            • 1970-01-01
            • 2014-10-04
            • 2013-02-15
            • 2020-10-20
            • 2013-09-30
            • 1970-01-01
            相关资源
            最近更新 更多