Есть ли способ инициализировать IKSaveOptions ImageKit по умолчанию для TIFF со сжатием LZW?

Я использую Mac OS X 10.6 SDK ImageKit IKSaveOptions, чтобы добавить аксессуар формата файла в NSSavePanel, используя:

- (id)initWithImageProperties:(NSDictionary *)imageProperties imageUTType:(NSString *)imageUTType;

а также

- (void)addSaveOptionsAccessoryViewToSavePanel:(NSSavePanel *)savePanel;

Я попытался создать NSDictionary, чтобы указать Compression = 5, но я не могу заставить IKSaveOptions показывать Format: TIFF, Compression: LZW при первом появлении NSSavePanel. Я также попытался сохранить возвращенный словарь imageProperties и словарь userSelection, а затем попытался вернуть его обратно в следующий раз, но NSSavePanel всегда по умолчанию использует формат: TIFF со сжатием: нет.

Кто-нибудь знает, как настроить формат/сжатие по умолчанию, которые отображаются в представлении аксессуаров?

Я хотел бы по умолчанию сохранить параметры TIFF/LZW и, кроме того, хотел бы восстановить последний выбранный пользователем формат файла в следующий раз. Я могу управлять форматом файла с помощью imageUTType (например, kUTTypeJPEG, kUTTypePNG, kUTTypeTIFF и т. д.), но я по-прежнему не могу установить начальный параметр сжатия для форматов TIFF или JPEG.

Спасибо,

-Рей


person Rei    schedule 27.04.2010    source источник


Ответы (1)


Общедоступного API для управления этим нет. Однако вы можете изменить его с помощью вспомогательного представления NSSavePanel.

Пример:

self.saveOptions = [[IKSaveOptions alloc] initWithImageProperties:nil
                                                            imageUTType:(NSString *)kUTTypeTIFF];
[self.saveOptions addSaveOptionsAccessoryViewToSavePanel:savePanel];


// find compression options popup button in accessory view, select desired compression
// correct title depends on localization -> be carefull with LZW and tag
NSView *accessoryView = [savePanel accessoryView];
NSArray *accessorySubViews = [accessoryView subviews];

for (id view in accessorySubViews) {

    if([view isKindOfClass:[NSPopUpButton class]]){
        NSPopUpButton *popupButton = (NSPopUpButton *)view;
        NSArray *menuItems =[[popupButton menu] itemArray];
        for (NSMenuItem *menutItem in menuItems) {
            if([[menutItem title] isEqualToString:@"LZW"]) {
                //make sure you reverse engineer tags for
                [popupButton selectItemWithTitle:@"LZW"];
                id target = [menutItem target];
                SEL action = [menutItem action];
                [target performSelector:action withObject:popupButton];
            }
        }
    }
}
person Marek H    schedule 13.04.2014