CGImageDestination не принимает свойства

Я экспортирую анимированный GIF-файл, используя быстрое нацеливание Mac OS, который работает, но свойства, которые я установил, не применяются. Я настроил свои свойства, и когда я регистрирую их, они отображаются так:

{
HasGlobalColorMap = 1;
LoopCount = 0;
}

В цикле я добавляю каждый кадр к месту назначения:

CGImageDestinationAddImage(destination, cgGif, gifProperties as CFDictionaryRef)

Затем после цикла я пытаюсь установить свойства еще раз и завершить назначение:

CGImageDestinationSetProperties(destination, gifProperties as CFDictionaryRef)
            if (!CGImageDestinationFinalize(destination)) {
            NSLog("failed to finalize image destination")
        }

Однако полученное изображение не настроено на петлю. С чего бы это?

1 ответ

Решение

На самом деле, я добился определенного прогресса...

Я настраивал параметры так:

        var imageProperties:NSMutableDictionary = NSMutableDictionary()
    imageProperties.setObject(NSNumber(float: 0.1), forKey: kCGImagePropertyGIFDelayTime as NSString)
    imageProperties.setObject(NSNumber(bool: false), forKey: kCGImagePropertyHasAlpha as NSString)
    imageProperties.setObject(NSString(string: "kUTTypeGIF"), forKey: kCGImageSourceTypeIdentifierHint as NSString)
    imageProperties.setObject(NSNumber(bool: false), forKey: kCGImagePropertyGIFImageColorMap as NSString)
    imageProperties.setObject(NSNumber(bool: true), forKey: kCGImageSourceShouldCache as NSString)
    let nestedImageProperties:NSDictionary = [imageProperties: kCGImagePropertyGIFDictionary]
    println("nestedImageProperties: \(nestedImageProperties)")

Который давал мне эту структуру:

nestedImageProperties: {
    {
    DelayTime = "0.1";
    HasAlpha = 0;
    ImageColorMap = 0;
    kCGImageSourceShouldCache = 1;
    kCGImageSourceTypeIdentifierHint = kUTTypeGIF;
} = "{GIF}";
}

Я нашел реализацию, которая определила свойства как это:

let fileProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]]
let frameProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFDelayTime as String: 1.0]]

давая эту структуру:

Frame Properties: [{GIF}: [DelayTime: 1.0]]
File Properties: [{GIF}: [LoopCount: 0]]

Затем я применил fileProperties к месту назначения:

CGImageDestinationSetProperties(destination, fileProperties as CFDictionaryRef)

и frameProperties для каждого изображения, как это было добавлено:

CGImageDestinationAddImage(destination, imageRef, frameProperties as CFDictionaryRef)

и, наконец, это работает, они применяются.

Еще не пробовал несколько свойств, но должно быть в порядке.

Другие вопросы по тегам