gpt4 book ai didi

c++ - 像素数据在内存中的布局?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:12 25 4
gpt4 key购买 nike

我正在为基于 PNG 的图像格式编写 C++ 库。对我来说,一个停顿点是我不确定应该如何在内存中布置像素数据;据我所知,有两种实用的方法:

  1. 大小为(宽*高)的数组;每个像素都可以通过数组[y*width + x]访问。
  2. 一个大小(高度)数组,包含指向大小(宽度)数组的指针。

PNG (libpng) 的标准引用实现使用上面的方法 2,而我看到其他人使用方法 1。是一个比另一个更好,还是每个方法都有自己的优缺点,到哪里必须做出妥协?此外,大多数图形显示系统使用哪种格式(可能是为了便于将我的库的输出用于其他 API)?

最佳答案

在我的脑海中:

  • 让我选择#2 的一件事是您的内存要求有点宽松。如果您选择 #1,系统将需要能够分配 height * width 数量的连续 内存。然而,在 #2 的情况下,它可以自由地从空闲区域分配较小的连续内存块,这些内存块的大小为 width(也可以是 height)。 (当您将每个像素的 channel 考虑在内时,即使是中等大小的图像,#1 也可能会失败。)
  • 此外,如果需要进行图像处理(指针交换就足够了),交换行(或列)可能会稍微好一些。
  • #2 的缺点当然是一个额外的间接级别,它渗透到每个访问和要维护的指针数组中。但考虑到当今的处理器速度和内存,这几乎不是问题。
  • #2 的第二个缺点是数据不一定彼此相邻,这使得处理器更难将正确的内存页面加载到缓存中。

关于c++ - 像素数据在内存中的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/854541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com