C# 如何确保获得无损图像

C# 如何确保获得无损图像,c#,image,rotation,crop,lossless,C#,Image,Rotation,Crop,Lossless,我正在尝试编写一个代码,获取图像PNG、JPG、BMP等的裁剪和旋转图像。 我希望在不丢失信息的情况下裁剪图像,而不改变插值 所以我用 Bitmap target = new Bitmap(cropRect.Width, cropRect.Height); using (Graphics g = Graphics.FromImage(target)) { g.DrawImage(img, new Rectangle(0, 0

我正在尝试编写一个代码,获取图像PNG、JPG、BMP等的裁剪和旋转图像。 我希望在不丢失信息的情况下裁剪图像,而不改变插值 所以我用

        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);
        }
其中目标是裁剪后的图像。img是原始图像,cropRect是我想要裁剪的裁剪矩形。 因为我保持图像大小不缩放,所以不应该丢失任何信息

之后,我使用旋转图像

        target.RotateFlip(RotateFlipType.Rotate90FlipNone);
因为它是90度旋转-它应该保持无损。 对吗? 我找不到关于这个主题的任何文档,如果有人有链接,我将不胜感激

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


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

更新了一些详细信息,我意识到我的初始答案有点遗漏。我正在使用ImageFormat.Bmp保存它-因此它不应该丢失信息。如果原始文件是Jpeg格式-没有无损的意义,如果是Png格式-将其保存为Bmp,则不应丢失信息是的,Bmp或Png将保留所有信息,但不是Bmp中的alpha(如果有)。我整晚都会选择png而不是bmp。