Сбой приложения при использовании CGImageSourceCreateThumbnailAtIndex в Swift - PullRequest
0 голосов
/ 06 апреля 2019

Я просто использую CGImageSourceCreateThumbnailAtIndex, чтобы уменьшить UIImage размер. Я получаю сообщение об ошибке:

"IIONumber - 'num' не является CFNumberRef".

Я не смог найти что это? Спасибо

func scaleDownImage()->void{   

   var nextImage = UIImage()
    if let img = nextDicData["img"] as? UIImage{
        let data = UIImagePNGRepresentation(img)
        if let cgimageSource = CGImageSourceCreateWithData(data! as CFData, nil){
            let option : [NSString : Any] = [kCGImageSourceThumbnailMaxPixelSize : self.outputSize, kCGImageSourceCreateThumbnailFromImageAlways : true]
            // That's crash at bellow line      
            if let scaleImage = CGImageSourceCreateThumbnailAtIndex(cgimageSource, 0, option as CFDictionary){
                nextImage = UIImage(cgImage: scaleImage)
            }
        }
    }
}

1 Ответ

0 голосов
/ 06 апреля 2019

Опция словаря, переданная методу CGImageSourceCreateThumbnailAtIndex, содержит kCGImageSourceThumbnailMaxPixelSize. Это должен быть CFNumber.

Документация Apple по kCGImageSourceThumbnailMaxPixelSize

Максимальная ширина и высота в пикселях миниатюры. Если этот ключ не указано, ширина и высота миниатюры не ограничены и миниатюры могут быть такими же большими, как само изображение. Если присутствует, этот ключ должно быть значением CFNumber.

Пожалуйста, убедитесь, что это CFNumber. Я считаю, что это причина крушения. Пожалуйста, найдите ссылку Apple здесь: https://developer.apple.com/documentation/imageio/kcgimagesourcethumbnailmaxpixelsize?language=objc

Попробуйте такие варианты.

let options = [
    kCGImageSourceCreateThumbnailWithTransform: true,
    kCGImageSourceCreateThumbnailFromImageAlways: true,
    kCGImageSourceThumbnailMaxPixelSize: 250 /* some size */] as CFDictionary
...