图像大小异常

时间:2013-10-01 09:27:22

标签: objective-c macos nsdata nsimage

我有一个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相同。

1 个答案:

答案 0 :(得分:2)

试试这个:

而不是

NSData *imageData = [image TIFFRepresentation];

使用它:

NSData *imageData = [image TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:0];