为什么渲染引擎将图像细分为小方块?

时间:2013-11-09 06:14:23

标签: c++ c image-processing imaging gil

想象一下,我在内存中有一个由arraystd::vector表示的图像;为了这个例子,我还假设我的图像像400x300像素,我想在最大64x64像素的正方形(或图块)中细分这个结构。

我正在考虑的数组就像这样宣布了

int a[400*300];

喜欢

int a[400][300];

这是一个很好的连续内存块。

我的观点是,您总是尽量保持数据结构和对该数据结构的访问尽可能线性。在正方形中细分图像涉及从1行跳到另一行或从1列跳到另一列,具体取决于图像在内存中的布局方式。考虑到图像的大小和尺寸,我在计算正方形的边界方面没有问题,但是当在这个正方形上表示迭代时,事情变得有点过于复杂,而我没有看到采用这种方法的任何实际好处。

那么为什么关于这种细分步骤的解决方案如此受欢迎呢?为什么不只是在时间或1列时间渲染?

1 个答案:

答案 0 :(得分:3)

内存位置/缓存一致性。大多数图像处理操作都是在2D中运行,为了有效进行内存访问,您希望2D中彼此接近的像素在内存中彼此靠近。像这样在块中排列数据意味着具有相同x坐标和相邻y坐标的2个像素平均具有比使用简单线性布局更接近的存储器地址。

在GPU渲染时,有更复杂的方法来布局通常用于纹理的图像,这样可以提供更好的内存局部性。