Как создать иконку ICNS программно?
ОК, это то, что я хочу:
- Возьми немного
NSImage
s - Добавьте их в
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 пункт назначения изображения не имеет достаточно изображений
Что не так с моим кодом?
Я посмотрел на ответы ниже, но все еще ничего:
1 ответ
Решение
Вы можете использовать IconFamily.
IconFamily - это оболочка Cocoa/Objective-C для типа данных "семейство значков" в Mac OS X Carbon API. Его основная цель - позволить приложениям Какао легко создавать пользовательские значки файлов из экземпляров NSImage и, таким образом, использовать преимущества форматов пиктограмм RGBA высокого разрешения Mac OS X для обеспечения подробного предварительного просмотра миниатюр содержимого файлов.
NSImage *mImage = [[NSImage alloc] initWithContentsOfFile:@"/Users/Username/Desktop/WhiteTiger.jpg"];
IconFamily *fam = [IconFamily iconFamilyWithThumbnailsOfImage:mImage];
[fam writeToFile:@"/Users/Username/Desktop/WhiteTiger.icns"];