У меня есть изображение в виде NSURL
в качестве входных данных. Я преобразовал этот URL-адрес в NSImage
, а затем в NSData
, из которого я мог получить CGImageRef
. Этот imageRef помог мне извлечь необработанные данные из изображения, такие как высота, ширина, bytesPerRow и т. д.
Вот код, который я использовал:
NSString * urlName = [url path];
NSImage *image = [[NSImage alloc] initWithContentsOfFile:urlName];
NSData *imageData = [image TIFFRepresentation];
CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)CFBridgingRetain(imageData), NULL);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, 0, NULL);
NSUInteger numberOfBitsPerPixel = CGImageGetBitsPerPixel(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
...
...
Теперь я проверил размер изображения, используя:
int sz = [imageData length];
что отличается от - int sz' = bytesPerRow * height
Я не могу понять, почему такая разница. И sz
на самом деле половина sz'
.
Я делаю какую-то ошибку при извлечении различной информации? Из того, что я могу понять, возможно, при преобразовании изображения в NSData
выполняются некоторые декомпрессии. В таком случае, что я должен использовать, чтобы получить надежные данные.
Я новичок в обработке изображений мира в Objective-C
, поэтому, пожалуйста, потерпите меня!
P.S. На самом деле я проверил размер файла, который я получаю в качестве входных данных в виде NSURL
, который совпадает с sz
.