此代码(source是一个具有NSImage对象的NSMutableArray ):
NSURL *fileURL = NSURL :aPath;CGImageDestinationRef dr =CGImageDestinationRef kUTTypeAppleICNS,1,NULL);对于(源代码中的NSImage *img ){ NSLog(@"%@",img);CGImageRef i1 = img CGImageForProposedRect:空上下文:零提示:零;CGImageDestinationAddImage(dr,i1,NULL);} CGImageDestinationFinalize(dr);CFRelease(dr);
所产生的产出如下:
Size={11.52,11.52} Reps=( "NSBitmapImageRep 0x10421fc30 Size={11.52,11.52} ColorSpace=(尚未加载) BPS=8 BPP=(尚未加载) Pixels=1024x1024 Alpha=NO Planar=NO Format=(尚未加载) CurrentBacking=nil (故障) CGImageSource=0x104221170“ (.) <- -在这里记录其他NSImage实例。 ImageIO:{##**$$}\x{e76f}错误\ CGImageDestinationFinalize图像目的地没有足够的图像。
你知道它为什么会以最后的错误结束吗?(顺便说一句,我想用IconFamily代替,但是它使用的许多方法都被废弃了)。
编辑:也许更重要的是提到我用来生成图像的代码,如果代码有问题,我也不会感到惊讶(我是个菜鸟):
// Get images
[source removeAllObjects];
NSSize sizes[10];
sizes[0] = NSMakeSize(1024,1024);
sizes[1] = NSMakeSize(512,512);
sizes[2] = NSMakeSize(512,512);
sizes[3] = NSMakeSize(256,256);
sizes[4] = NSMakeSize(256,256);
sizes[5] = NSMakeSize(128,128);
sizes[6] = NSMakeSize(64,64);
sizes[7] = NSMakeSize(32,32);
sizes[8] = NSMakeSize(32,32);
sizes[9] = NSMakeSize(16,16);
for (int i=0 ; i<10 ; i++) {
if ([[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"Size%i",i+1]]) {
NSBitmapImageRep *srcimg = [[NSBitmapImageRep alloc] initWithData:[NSData dataWithContentsOfFile:aFile]];
[srcimg setPixelsHigh:sizes[i].height];
[srcimg setPixelsWide:sizes[i].width];
NSImage *newimg = [[NSImage alloc] initWithSize:NSZeroSize];
[newimg addRepresentation:srcimg];
if (![newimg isValid]) {
[delegate error:@"Invalid file."];
}
else [source addObject:newimg];
}
}发布于 2012-12-29 00:11:25
一部分猜测解决方案,一部分修改将改善代码,即使它不是解决方案…
CGImageDestinationCreateWithURL中的图像数量是错误的;您应该传递希望添加的图像数量。
给定一个循环,您显然期望添加一个或多个。考虑到您的输出,实际上您正在添加多个图像。
你说你会加一个图像,然后你添加了不止一个。
我的猜测是,错误信息不明确/过于具体。错误说:
CGImageDestinationFinalize图像目的地没有足够的图像
但我认为它的意思是:
CGImageDestinationFinalize图像目的地的图像数量与您承诺的不同
换句话说,问题不在于您提供的图像比预期的少,而是您提供的图像比预期的多,而且CGImageDestination对越来越少的图像没有任何区别。
更改CGImageDestinationCreateWithURL调用,以提供要添加的图像的正确数量。考虑到问题中的代码,这应该是source.count。
发布于 2012-12-28 09:01:11
通过-TIFFRepresentation和CGImageSource是非常迂回的。使用 method代替。
https://stackoverflow.com/questions/14040938
复制相似问题