0

我有一个NSURL作为输入形式的图像。我将此 url 转换为NSImageNSData可以从中获取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,所以请多多包涵!

PS我实际上检查了我作为输入获得的文件的大小,其形式NSURLsz.

4

1 回答 1

2

尝试这个:

代替

NSData *imageData = [image TIFFRepresentation];

用这个:

NSData *imageData = [image TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:0];
于 2013-10-03T10:22:07.217 回答