【问题标题】:How to create a ICNS icon programmatically?如何以编程方式创建 ICNS 图标?
【发布时间】:2012-09-07 09:14:36
【问题描述】:

好的,这就是我想要的:

  • 拿一些NSImages
  • 将它们添加到ICNS 文件中
  • 保存

这是我迄今为止所做的(纯粹作为测试):

- (CGImageRef)refFromImage:(NSImage*)img
{
    CGImageSourceRef source;

    source = CGImageSourceCreateWithData((CFDataRef)[img TIFFRepresentation], NULL);
    CGImageRef maskRef =  CGImageSourceCreateImageAtIndex(source, 0, NULL);

    return maskRef;
}

- (void)awakeFromNib
{
    NSImage* img1 = [NSImage imageNamed:@"image1"];
    NSImage* img2 = [NSImage imageNamed:@"image2"];

    NSLog(@"%@",img1);
    CGImageRef i1 = [self refFromImage:img1];
    CGImageRef i2 = [self refFromImage:img2];

    NSURL *fileURL = [NSURL fileURLWithPath:[@"~/Documents/final.icns" stringByExpandingTildeInPath]]; 
    CGImageDestinationRef dr = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypeAppleICNS , 1, NULL);

    CGImageDestinationAddImage(dr, i1, NULL);
    CGImageDestinationAddImage(dr, i2, NULL);
    /* Even tried adding 'multiple' times

    CGImageDestinationAddImage(dr, i1, NULL);
    CGImageDestinationAddImage(dr, i2, NULL);
    CGImageDestinationAddImage(dr, i1, NULL);
    CGImageDestinationAddImage(dr, i2, NULL);

    */

    CGImageDestinationFinalize(dr);

    CFRelease(dr);
}

但是,它仍然不断抛出错误:

ImageIO: CGImageDestinationFinalize 图像目标 没有足够的图片

我的代码有什么问题?


我已经看过下面的答案,但仍然没有:

【问题讨论】:

标签: objective-c cocoa nsimage cgimageref icns


【解决方案1】:

您可以使用IconFamily

IconFamily 是 Mac OS X Carbon 的 Cocoa/Objective-C 包装器 API 的“图标系列”数据类型。其主要目的是启用 Cocoa 应用程序轻松地从 NSImage 创建自定义文件图标 实例,从而利用 Mac OS X 的高分辨率 RGBA “缩略图”图标格式提供丰富详细的缩略图预览 文件的内容。

NSImage *mImage = [[NSImage alloc] initWithContentsOfFile:@"/Users/Username/Desktop/WhiteTiger.jpg"];
IconFamily *fam = [IconFamily iconFamilyWithThumbnailsOfImage:mImage];    
[fam writeToFile:@"/Users/Username/Desktop/WhiteTiger.icns"];

【讨论】:

  • 请注意,当前版本的 IconFamily (0.9.4) 不适用于配备 Retina 显示屏的 Mac。 (HDPI)
  • 这里有适用于视网膜的 IconFamily 的更新版本:github.com/sveinbjornt/IconFamily
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多