`获取stride(不同行像素点之间的字节数)
screen_get_buffer_property_iv(mScreenPixelBuffer, SCREEN_PROPERTY_STRIDE, &mStride)`
我不明白第一行关于在不同行的像素之间有字节是什么意思。函数是步长是通过什么得到的。
最佳答案
如果我们有一堆矩形像素(屏幕、位图或类似的东西),程序必须有一种方法来计算像素的位置。让我们称这种像素束为“表面”。
表面可以被分割成单独的像素,然后我们可以把它放在一个很长的行和数字中,然后从 0 到某个大数字(例如,一个 1280 x 1024 的屏幕将有 1310720 个像素)。但是,如果您在屏幕上显示这一长行像素,那么谈论 1280 像素长且有 1024 行的像素行更有意义。
现在,假设我们要在像素 100,100 到 100,200 之间画一条线。我们可以轻松地将其写为:
诠释我; 对于(我= 100;我<200;我++) { setpixel(表面, 100, 100+i, 颜色);
现在,如果我们要实现setpixel,我们需要做什么呢?一件事是将我们的 x, y 坐标 (100, 100+i) 转换为我们的“长行像素”的位置。
一般公式趋向于 (x + y * width) * bytes_per_pixel
。因此,如果我们有一个 32bpp 的图像(每个像素四个字节),那就是 (100 + (100+i) * 1280) * 4
然而,为了更容易设计图形芯片,通常会限制“表面的宽度必须是 X 的偶数倍”,其中 X 通常是 16、32、64 或其他一些幂2. 有时,它必须直接是2的幂(例如早期opengl中的纹理大小只能是2^n x 2^n像素——你不必使用整个纹理)。这就是大步前进的地方。
假设我们想要一个 100 x 100 像素的位图。但是我们用来将位图绘制到屏幕上的图形芯片有一个规则,你必须有 32 像素宽的偶数倍的表面。所以我们做了这样的事情
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
这里的 X 代表我们位图中的实际像素(每个 X 10 个),以及我们必须让图形芯片满意的 28 个“浪费”像素。
现在使用宽度的公式不起作用,因为从创建位图的软件来看,宽度是 100 像素。我们需要更改数学以弥补“每行像素末尾的额外空间”:
(x + y * stride) * bytes_per_pixel
现在,stride
为 128,但 width
为 100 像素。
关于c++ - screen.h头文件方法困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069482/