首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Drawing.Image.RotateFlip(RotateFlipType)

System.Drawing.Image.RotateFlip(RotateFlipType)
EN

Stack Overflow用户
提问于 2013-10-14 16:17:30
回答 2查看 3.6K关注 0票数 1

我有以下代码来旋转C#中的图像:

代码语言:javascript
运行
复制
    using (var stream = new FileStream(path, FileMode.Open))
    {
        using (var image = Image.FromStream(stream))
        {
            stream.Close();
            image.RotateFlip(rotateType);
            image.Save(path1, ImageFormat.Png);
            image.Dispose();
        }
    }

如果原始文件大小为700 KiB,则新旋转的文件大小为7+ MiB。

这个代码有什么问题?任何帮助都是非常感谢的。

更新:

我尝试将行image.Save(path1, ImageFormat.Png)更改为image.Save(path1)image.Save(path1, image.RawFormt),但没有任何改进。

EN

回答 2

Stack Overflow用户

发布于 2013-10-14 16:38:52

PNG是位图文件格式:

  • 与jpg相比文件大小更大

因此,您应该保护您作为jpg的形象:

因此,无损PNG格式最适合于仍然处于编辑阶段的图片--而且有损格式,如JPEG,对于照片图像的最终分发是最好的,因为在这种情况下,JPG文件通常更小.

来源:维基百科

尝试通过以下方式来保护JPEG中的图像:

代码语言:javascript
运行
复制
image.Save(path, YourClass.GetImageFormat(image));

测试:

使用此方法旋转JPG文件,大小保持不变。

旋转一个15.7MiBBMP文件,新的大小是~800 new。

若要使用现有文件格式,请使用此扩展名方法:

代码语言:javascript
运行
复制
public static System.Drawing.Imaging.ImageFormat GetImageFormat(System.Drawing.Image img)
{             
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
        return System.Drawing.Imaging.ImageFormat.Jpeg;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
        return System.Drawing.Imaging.ImageFormat.Bmp;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
        return System.Drawing.Imaging.ImageFormat.Png;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf))
        return System.Drawing.Imaging.ImageFormat.Emf;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Exif))
        return System.Drawing.Imaging.ImageFormat.Exif;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
        return System.Drawing.Imaging.ImageFormat.Gif;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
        return System.Drawing.Imaging.ImageFormat.Icon;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.MemoryBmp))
        return System.Drawing.Imaging.ImageFormat.MemoryBmp;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
        return System.Drawing.Imaging.ImageFormat.Tiff;
    else
        return System.Drawing.Imaging.ImageFormat.Wmf;            
}

来源:StackOverflow

记住,在操作图像之前,您必须查找格式。

否则该图像将被识别为MemoryBmp

代码语言:javascript
运行
复制
using (var stream = new FileStream(path, FileMode.Open))
        {
            using (var image = Image.FromStream(stream))
            {
                stream.Close();
                var format = YourClass.GetImageFormat(image);
                image.RotateFlip(RotateFlipType.Rotate180FlipNone);
                image.Save(path, format);
                image.Dispose();
            }
        }
票数 0
EN

Stack Overflow用户

发布于 2013-10-14 16:44:41

C# -如何改变PNG的质量或颜色深度

这家伙的问题看起来和你看到的一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19364623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档