Я пытаюсь прочитать пиксели из буфера экрана, я создаю CGImageRef
с CGDisplayCreateImage
, но значения для CGImageGetWidth
и CGImageGetBytesPerRow
Не имеет смысла вместе , деление байтов на строку на байты на пиксель дает мне 1376 пикселей на строку, но ширина изображения составляет 1366.CGImageRef ширина не согласен с байт за строкой
Что здесь происходит? Есть ли какие-то дополнения в изображении? Как я читаю данные, которые я получаю из него безопасно, и с правильными результатами?
Edit: минимальный код, необходимый для воспроизведения этого заключается в следующем:
#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;
}
Я просто получаю изображение из буфера дисплея. – porglezomp
Какими должны быть размеры изображения? –
Действительно, единственное, что имеет значение здесь, это то, что ширина данных отличается от ширины содержимого. Я не должен получать 1376 для количества пикселей в строке и иметь ширину изображения 1366. – porglezomp