我有一个NSURL
形式的图像作为输入。我将此网址转换为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
相同。
答案 0 :(得分:2)
试试这个:
而不是
NSData *imageData = [image TIFFRepresentation];
使用它:
NSData *imageData = [image TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:0];