【发布时间】:2012-12-26 13:00:34
【问题描述】:
此代码(source 是带有 NSImage 对象的 NSMutableArray:
NSURL *fileURL = [NSURL fileURLWithPath:aPath]; CGImageDestinationRef dr = CGImageDestinationCreateWithURL((CFURLRef)fileURL, kUTTypeAppleICNS, 1, NULL); for (NSImage *img in source) { NSLog(@"%@",img); CGImageRef i1 = [img CGImageForProposedRect:NULL context:nil hints:nil]; CGImageDestinationAddImage(dr, i1, NULL); } CGImageDestinationFinalize(dr); CFRelease(dr);
导致以下输出:
2012-12-26 13:48:57.682 Eicon[1131:1b0f] |NSImage 0x1025233b0 大小={11.52, 11.52} 代表=( "NSBitmapImageRep 0x10421fc30 Size={11.52, 11.52} ColorSpace=(尚未加载) BPS=8 BPP=(尚未加载) Pixels=1024x1024 Alpha=NO Planar=NO Format=(尚未加载) CurrentBacking=nil (faulting) CGImageSource =0x104221170"
(...)
ImageIO:|错误| 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];
}
}
【问题讨论】:
-
如果你记录你的 CGImageRef 会怎样?
-
-refFromImage:是做什么的?它是否返回非零的东西? -
请编辑您的问题以包含
refFromImage:的代码。 -
更新了!不确定如何记录 CGImageRef...
-
我认为您可以使用
NSLog记录CGImageRef,如果不使用CFShow。