C++ screen.h头文件方法混乱

C++ screen.h头文件方法混乱,c++,graphics,blackberry-10,C++,Graphics,Blackberry 10,`获取步幅(不同行上像素之间的字节数) 屏幕\获取\缓冲区\属性\ iv(mScreenPixelBuffer、屏幕\属性\步幅和mStride)` 我不明白第一行在不同行的像素之间有字节意味着什么。函数是通过步长获得的。这里的步长指的是与数组相邻行的开头相对应的内存位置之间的字节数,在这种情况下为像素 在全压缩数组中,步长等于单个像素的大小乘以行中的像素数。出于性能原因,经常对数组进行对齐,以便每行采用“舍入”字节数,通常为2的指数。行的字节大小(也称为跨距)无法通过其他数组参数计算,必须知道

`获取步幅(不同行上像素之间的字节数)

屏幕\获取\缓冲区\属性\ iv(mScreenPixelBuffer、屏幕\属性\步幅和mStride)`

我不明白第一行在不同行的像素之间有字节意味着什么。函数是通过步长获得的。

这里的步长指的是与数组相邻行的开头相对应的内存位置之间的字节数,在这种情况下为像素


在全压缩数组中,步长等于单个像素的大小乘以行中的像素数。出于性能原因,经常对数组进行对齐,以便每行采用“舍入”字节数,通常为2的指数。行的字节大小(也称为跨距)无法通过其他数组参数计算,必须知道,才能正确计算任意像素的内存位置。

如果我们有一组矩形像素(屏幕、位图或类似的),则必须有一种方法让程序计算像素的位置。让我们把这种像素群称为“曲面”

曲面可以分割为单个像素,我们可以将其放在一个很长的行中,然后从0到一些大的数字(例如,1280 x 1024屏幕将有1310720个像素)。但是如果你在屏幕上显示这一长行像素,那么谈论1280像素长、1024行的像素行就更有意义了

现在,假设我们想画一条从像素100100到100200的线。我们可以很容易地将其写成:

int i; 对于(i=100;i<200;i++) { 设置像素(表面,100,100+i,彩色); }

现在,如果我们想实现setpixel,我们需要做什么?一件事是将我们的x,y坐标(100100+i)转换成我们的“长行像素”的位置

一般公式往往是
(x+y*宽度)*字节/u像素
。因此,如果我们有一个32bpp的图像(每像素四个字节),那么(100+(100+i)*1280)*4

然而,为了简化图形芯片的设计,通常会对“曲面的宽度必须是X的偶数倍”等内容进行限制,其中X通常是16、32、64或其他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*步幅)*每像素字节数


现在,
步幅是128,但是
宽度是100像素

哇,解释得真不错。非常感谢:)