13

我正在将图像转换为 MOV 文件,并且发生了一件有趣的事情。我记录了每个颜色分量的位数、每个像素的位数和每行的字节数。这是我的代码:

NSLog(@"Image width: %d, Height: %d", CGImageGetWidth(image), CGImageGetHeight(image));
NSLog(@"BPC: %d \ BPP: %d \ ByPR: %d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image));

这是我的输出:

图像宽度:300,高度:300(一切都符合预期) BPC:8(每种颜色 8 位......到目前为止一切都很好) BPP:32(32 = 4 个分量 ARGB * 每种颜色 8 位......知道了)ByPR :1216(每行 300 像素 * 每像素 4 字节 = 每行 1200 字节)

为什么我每行记录 1216 个字节,而不是 1200 个?顺便说一句,这不仅仅是侥幸。当我根据缓冲区大小的这些数字创建视频时,它可以工作。当我以每行 1200 字节创建它时,我得到了一些混乱的混叠效果。

想法?!

4

1 回答 1

23

该系统喜欢图像是每行 64 字节的倍数,这可能是由于缓存行对齐而获得更好的性能。1200 不是 64 的倍数,但 1216 是。

于 2013-04-10T19:59:55.913 回答