【问题标题】:c# When does System.Drawing.Bitmap decompress the image stream?c# System.Drawing.Bitmap什么时候解压图片流?
【发布时间】:2014-05-30 07:30:40
【问题描述】:

现在我正在使用 System.Drawing.Bitmap 拍摄图像并将其划分为多个区域。我假设 Bitmap 必须解压缩图像才能对其执行操作。

但是,Bitmap 类接受以下格式:BMP、GIF、EXIF、JPG、PNG 和 TIFF

其中一些格式是压缩的,所以如果流中的数据被压缩,是不是必须解压缩才能执行操作?如果是这样,是不是意味着 Bitmap 类为解压后的流分配了更多的内存?

我觉得如果位图类对流进行数据修改,那么它必须解压缩流,这应该使位图类在处理 BMP 流时占用与处理 PNG 流时相同的内存量,尽管事实上,PNG 流更小。

【问题讨论】:

    标签: c# image


    【解决方案1】:

    事实上确实如此,GDI 需要原始像素数据来将其提供给显卡和/或表示它,所以是的,它正在被解压缩,但可能你看不到内存上升,因为它已经进入系统/显卡。

    一些特殊情况是DXT纹理和其他一些硬件可以理解的特殊类型,不需要解压就可以工作。

    【讨论】:

    • 嗯,可能是这样。不管没有理由我不应该将流本身保留为 PNG 流并将其传递给构造函数,对吗?我想要一个流的副本,但将其保存为位图比将其保存为 PNG 需要更多的内存,但我没有看到它如何避免最终需要内存。但是,如果它可以访问显卡,那就很有意义了。
    • 是的,确实使用PNG而不是BMP总是一个好主意,与拥有数十Mb的大BMP相比,解压缩开销很小。但是正如您所说,位图确实是内存消耗资源,如果您不小心使用它们,很容易在位图中使用数千 Mb,请记住始终丢弃未使用的位图,不要让垃圾收集器拿走它们,您不知道什么时候收。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多