我在使用MPSImage的基础内存时遇到麻烦。我一直在使用MPSImage的getBytes
成员变量上的replace
和texture
方法来读取和写入基础数据。问题是我找不到有关如何将内存解释为图像的文档(即行,列和通道的布局方式)。使问题复杂化的部分原因是,无论特征通道数量如何,数据都将存储为RGBA纹理 slice 的堆栈,而某些通道可能未使用。例如,具有3个功能通道,将有一个RGBA纹理 slice ,并且一个通道的可用空间将不使用。
问题是,MPSImage数据实际上如何在纹理内排列?似乎比我最初的猜测要复杂。
经过大量实验后,根据要素通道的数量是 4,数据的排列方式似乎有所不同。但是我仍然很难弄清楚。
谁能向我解释MPSImage数据布局?
最佳答案
前四个特征通道的编码方式与标准RGBA纹理的编码方式相同。功能通道0处于“R”位置,功能通道1处于“G”位置,依此类推。
接下来的四个特征通道作为Texture2d_array中的下一个 slice 出现。如果您有一个带有20个特征通道的100x100图像,则将其编码为100x100纹理数组,其中数组(20/4 =)5个 slice 。
使事情变得更复杂的是,可以使MPSImage数组中包含多个图像,每个图像具有4个以上的功能通道。这通常称为批处理。在第一张图像之后立即在纹理数组中找到第二张图像。如果MPSImage中有多个100x100x20图像,则第二个图像从 slice 5开始,第三个图像从 slice 10开始,依此类推。