【问题标题】:How to make sure we get a lossless image如何确保我们获得无损图像
【发布时间】:2015-02-26 18:47:58
【问题描述】:

我正在尝试编写获取图像(PNG、JPG、BMP、ETC')裁剪和旋转图像的代码。 我想在不丢失信息的情况下裁剪图像(插值没有变化) 所以我正在使用

        Bitmap target = new Bitmap(cropRect.Width, cropRect.Height);
        using (Graphics g = Graphics.FromImage(target))
        {
            g.DrawImage(img, new Rectangle(0, 0, target.Width, target.Height),
                             cropRect,
                             GraphicsUnit.Pixel);
        }

其中 target 是裁剪后的图像。 img 是原始图像,cropRect 是我要裁剪的裁剪矩形。 因为我保持图像大小(无缩放),所以不应该丢失任何信息。

之后我使用

旋转图像
        target.RotateFlip(RotateFlipType.Rotate90FlipNone);

因为它是 90 度旋转 - 它应该保持无损。 那是对的吗? 我找不到有关该主题的任何文档,如果有人有链接,我将不胜感激!

【问题讨论】:

    标签: c# image rotation crop lossless


    【解决方案1】:

    您可以使用DrawImageUnscaled/DrawImageUnscaledAndClipped 来绝对确保它不会做任何时髦的事情,尽管我怀疑它在您的情况下无论如何都会发生。由于它是 90 度增量和/或翻转,RotateFlip 不应降低图像质量。

    但是,如果您将图像重新保存为非无损格式,您肯定会丢失一些信息。

    【讨论】:

    • (更新了更多信息,我意识到我最初的答案有点遗漏)
    • 我正在使用 ImageFormat.Bmp 保存它 - 所以它不应该丢失信息。 (如果原件是 Jpeg 格式 - 没有必要无损,如果是 Png 格式 - 将其保存为 Bmp 它不应该丢失信息)
    • 是的,bmp 或 png 将保留所有信息(虽然不是 bmp 中的 alpha,如果你有的话)。我会整夜选择 png 而不是 bmp。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多