Есть ли способ инициализировать IKSaveOptions ImageKit по умолчанию в TIFF со сжатием LZW? - PullRequest
3 голосов
/ 27 апреля 2010

Я использую IKSaveOptions для Mac OS X 10.6 SDK ImageKit, чтобы добавить аксессуар формата файла в 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.

Спасибо

-Rei

1 Ответ

2 голосов
/ 13 апреля 2014

Нет открытого 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];
            }
        }
    }
}
...