【问题标题】:Writing image data to the disk as fast as possible尽可能快地将图像数据写入磁盘
【发布时间】:2018-04-20 23:50:45
【问题描述】:

我正在编写一个生成大量图像的应用程序。每帧大小为 1280x800 像素,每个像素有 1 个字节用于颜色信息(灰度)。每个帧都必须写入磁盘。

目前我只是将原始像素数据转储到磁盘上的二进制文件中。然后可以使用我也创建的特殊查看器查看该文件。

这是一个非常不令人满意的解决方案,因为无法直接查看/处理图像。他们总是必须通过我的自定义查看器/转换器运行。

有没有一种图像格式可以用来将图像写入磁盘:

  1. 写入速度很快(无压缩等)
  2. 不会大大增加最终文件的大小
  3. 支持将我的原始像素缓冲区转储到那里(没有对齐更改等)
  4. 可由常用应用程序(Windows Explorer、Paint、Photoshop 等)读取

我已经尝试使用 .png,但由于压缩,文件生成时间过长。

【问题讨论】:

  • 我不要求任何图书馆。
  • 使用格式意味着使用库或编写自己的库,这两者通常都被认为过于宽泛。另外,我认为引用的指南可能是为了更普遍地推断(但我可能错了)。
  • 除了@lisyarus 的优秀建议之外,还可以考虑使用单独的线程将数据写入磁盘。
  • 多少张图片是“一个巨大的数量”?您是否考虑过写信给stdout,然后将ffmpeg 作为单独的进程运行以创建数据视频——这也会引入一定程度的并行性并节省空间?

标签: c++ bmp


【解决方案1】:

看看binary Portable GrayMap (P5) 格式。它由一个极其简单的标题和后面的原始图像数据组成(没有任何对齐要求),并受到图像查看器的广泛支持。

【讨论】:

  • 太棒了,正是我需要的。奇怪的是我以前从未听说过这种格式......
【解决方案2】:

bmp 和 tiff 都可以用来保存原始数据。 Bmp 具有图像颠倒的奇怪之处,除非高度为负数。并且 tiff 有很多编码选项。无论如何,对用作模板的格式进行逆向工程应该是可行的,其中复制粘贴了图像数据。所以不需要使用库:只需连接页眉、图像数据和可选的页脚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多