我正在尝试从屏幕缓冲区中读取像素,我正在创建一个CGImageRef
with CGDisplayCreateImage
,但是 和 的值CGImageGetWidth
一起CGImageGetBytesPerRow
没有意义,将每行的字节数除以每像素的字节数给我每行 1376 个像素,但是图像的宽度为 1366。
这里发生了什么?图像中是否有某种填充?如何从数据中读取安全并获得正确的结果?
编辑:重现此所需的最少代码如下:
#import <Foundation/Foundation.h>
#import <ApplicationServices/ApplicationServices.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
CGImageRef image = CGDisplayCreateImage(CGMainDisplayID());
size_t width = CGImageGetWidth(image);
size_t bpr = CGImageGetBytesPerRow(image);
size_t bpp = CGImageGetBitsPerPixel(image);
size_t bpc = CGImageGetBitsPerComponent(image);
size_t bytes_per_pixel = bpp / bpc;
NSLog(@"%li %li", bpr/bytes_per_pixel, width);
CGImageRelease(image);
}
return 0;
}