我似乎想把自己绑在一起试图阅读所有可以在OSX的Cocoa应用程序中表示图像的不同方法。
我的应用程序读入图像,将CIFilters应用于它,然后保存输出。直到今天早上,这对我投入的所有图像都很好。但是,我发现一些BMP文件在我尝试将任何CIFilter应用到它们时会产生空的透明图像。
一个这样的图像是Dragon Age 2加载器的广告之一(我今天早上只是在随机图像上测试我的应用程序); http://www.johnwordsworth.com/wp-content/uploads/2011/08/hires_en.bmp
具体来说,我的代码执行以下操作。
此过程适用于我投入的99%的文件(目前为止所有JPG,PNG,TIFF),而不是某些BMP文件。如果我跳过第2步,预览和保存的图像就会出现。但是,如果我打开第2步,则生成的图像始终为空白且透明。
代码非常大,但我认为这是相关的代码片段......
AIImage加载方法
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:imagePath], nil);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, nil);
CFDictionaryRef dictionaryRef = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil);
self.imageProperties = [NSMutableDictionary dictionaryWithDictionary:((NSDictionary *)dictionaryRef)];
self.imageData = [CIImage imageWithCGImage:imageRef];
AIImageResize方法
NSAffineTransform *transform = [NSAffineTransform transform];
[transform scaleXBy:(targetSize.width / sourceRect.size.width) yBy:(targetSize.height / sourceRect.size.height)];
CIFilter *transformFilter = [CIFilter filterWithName:@"CIAffineTransform"];
[transformFilter setValue:transform forKey:@"inputTransform"];
[transformFilter setValue:currentImage forKey:@"inputImage"];
currentImage = [transformFilter valueForKey:@"outputImage"];
aiImage.imageData = currentImage;
CIImagePreview Method
NSCIImageRep *imageRep = [[NSCIImageRep alloc] initWithCIImage:ciImage];
NSImage *nsImage = [[[NSImage alloc] initWithSize:ciImage.extent.size] autorelease];
[nsImage addRepresentation:imageRep];
谢谢你的期待。任何建议都将不胜感激。