首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建ICNS文件时ImageIO错误

创建ICNS文件时ImageIO错误
EN

Stack Overflow用户
提问于 2012-12-26 13:00:34
回答 2查看 1.3K关注 0票数 1

此代码(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代替,但是它使用的许多方法都被废弃了)。

编辑:也许更重要的是提到我用来生成图像的代码,如果代码有问题,我也不会感到惊讶(我是个菜鸟):

代码语言:javascript
复制
// 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];
    }
}
EN

回答 2

Stack Overflow用户

发布于 2012-12-29 00:11:25

一部分猜测解决方案,一部分修改将改善代码,即使它不是解决方案…

CGImageDestinationCreateWithURL中的图像数量是错误的;您应该传递希望添加的图像数量。

给定一个循环,您显然期望添加一个或多个。考虑到您的输出,实际上您正在添加多个图像。

你说你会加一个图像,然后你添加了不止一个。

我的猜测是,错误信息不明确/过于具体。错误说:

CGImageDestinationFinalize图像目的地没有足够的图像

但我认为它的意思是:

CGImageDestinationFinalize图像目的地的图像数量与您承诺的不同

换句话说,问题不在于您提供的图像比预期的少,而是您提供的图像比预期的多,而且CGImageDestination对越来越少的图像没有任何区别。

更改CGImageDestinationCreateWithURL调用,以提供要添加的图像的正确数量。考虑到问题中的代码,这应该是source.count

票数 3
EN

Stack Overflow用户

发布于 2012-12-28 09:01:11

通过-TIFFRepresentationCGImageSource是非常迂回的。使用 method代替。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14040938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档