【问题标题】:Encode a Bitmap as a Jpeg将位图编码为 Jpeg
【发布时间】:2012-09-11 17:25:16
【问题描述】:

首先,这个问题不是关于“如何将位图保存为磁盘上的 jpeg?”

我找不到(或想到)用 Jpeg 压缩转换 Bitmap 的方法,但将其保留为 Bitmap 对象。 MSDN clearly shows 如何将位图保存为 JPEG,但我正在寻找的是如何将编码/压缩应用于 Bitmap 对象,所以我仍然可以在我的代码中传递它,而无需引用文件.

其中一个原因是一个帮助类处理位图,但不应该知道使用的持久性方法。

【问题讨论】:

标签: c# encoding bitmap jpeg


【解决方案1】:

加载到程序内存时,所有图像都是位图。写入磁盘时通常使用特定的压缩,从磁盘读取时通常使用解压缩。

如果您担心图像的内存占用,您可以压缩字节并在内部传递字节数组。压缩将有利于图像的无损压缩。不要忘记许多图像压缩都有different levels of losiness (sp?),换句话说,压缩会丢弃数据以尽可能少地存储图像。

去/压缩也是一种性能权衡,因为您需要用内存占用来换取处理时间。在任何情况下,除非您真的很喜欢,否则如果您需要以任何方式对其进行操作,图像确实需要是位图。

这里是an answer for a somewhat similar question,您可能会觉得有趣。

【讨论】:

  • 我真正关心的是图像处理和持久性之间的关注点分离。我可以将 jpeg 保存在文件系统(直接或隔离存储)、数据库或云中。我的图像处理不知道,我的持久层做一些图像处理是不对的,不是吗?
  • 没错。图像处理是一个单独的问题。虽然如果您使用任何类型的有损压缩类型,您会通过抛出压缩算法认为不需要持久化图像的数据来自动进行处理。
【解决方案2】:

Bitmap 不支持编码的内存存储。它始终未编码(请参阅PixelFormat 枚举)。可能您需要编写自己的包装类/抽象,或者放弃这个想法。

【讨论】:

    【解决方案3】:
    var stream = new MemoryStream()
    Bitmap.Save(Stream, ImageFormat)
    

    这是你需要的吗?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多