使用图像I / O目标C加载原始图像返回错误的分辨率

时间:2016-06-21 11:16:40

标签: ios objective-c image

我正在尝试将RAW图像加载到iOS项目进行显示。目前,我正在使用这段代码加载原始图像。

CFDictionaryRef optionsRef = (__bridge CFDictionaryRef) @{
                                                                  //                                                               (id) kCGImageSourceShouldAllowFloat: @YES,
                                                                  (id) kCGImageSourceCreateThumbnailWithTransform : @YES,
                                                                  (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
                                                                  (id) kCGImageSourceThumbnailMaxPixelSize : @(MAX(SCREEN_HEIGHT, SCREEN_WIDTH) * ([UIScreen mainScreen].scale))
                                                                  };

        CGImageSourceRef imageSourceRef = CGImageSourceCreateWithURL((CFURLRef)imageUrl, NULL);

        if (!imageSourceRef)
            return nil;

        NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,
                                 nil];
        CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, (CFDictionaryRef)options);
        if (imageProperties) {
            NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
            NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
            NSLog(@"Image dimensions: %@ x %@ px", width, height);
            CFRelease(imageProperties);
        }

问题是,这段代码可以完美地与某些图像一起使用,而它与其他图像的行为很奇怪。例如,我加载了一个图像,它显示宽度为128,高度为96,而正确的宽度高度为4320×3240。

我不确定这里的问题是什么,因为我所做的只是将图像加载到CGImageSourceRef。 :(

2 个答案:

答案 0 :(得分:0)

原始你的意思是相机生? (例如尼康NEF文件?)

据我所知,iOS没有原始图像解析引擎。它唯一能做的就是加载嵌入的JPEG缩略图。您可能看到缩略图的大小,而不是完整原始图像的大小。

免责声明:我从未试图在iOS中打开相机原始图像,因此我对iOS所做的回答是基于对我所读过的内容的不完美记忆。

答案 1 :(得分:0)

Nikon有可供下载的库,我认为它们是源代码形式。可能是C或C ++,因此编译它们并弄清楚如何从iOS使用它们将花费一些工作,但应该是可能的。您应该可以在尼康网站上找到它们。