Масштабирование изображения с помощью Core Image обрезает вместо масштабирования - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть функция, которая должна масштабировать изображение, используя фильтры Core Image.Он принимает NSImage и номер измерения в качестве аргументов и возвращает масштабированный NSImage.Я использовал: Обработка изображения с использованием встроенных фильтров в качестве ссылки.Код, кажется, обрезает изображение вместо изменения его размера.Я клянусь, у меня это работало в одной точке, так где я ошибся?

func imageCIScale(_ image: NSImage, dimension: CGFloat) -> NSImage? {
    guard let data = image.tiffRepresentation,
        let scaleFilter = CIFilter(name: "CILanczosScaleTransform"),
        let ciImage = CIImage(data: data)
    else {
        print("Failure! Abject failure! Couldn't even get started")
        return nil
    }

    let scaleFactor = dimension / image.size.height

    scaleFilter.setValue(ciImage, forKey: kCIInputImageKey)
    scaleFilter.setValue(scaleFactor, forKey: kCIInputScaleKey)
    scaleFilter.setValue(1.0, forKey: kCIInputAspectRatioKey)
    let outputImage = scaleFilter.outputImage

    let context = CIContext()
    guard let scaledImage = context.createCGImage(ciImage, from: outputImage!.extent) else {
        print("Failed to create CGImage")
        return nil
    }

    return NSImage(cgImage: scaledImage, size: NSZeroSize)
}

Функция будет вызываться как:

let myScaledNSImage = imageCIScale(myOriginalNSImage, dimension: 32.0)

и должна привести к 32 x 32изображение

1 Ответ

0 голосов
/ 17 декабря 2018

Хорошо, после хорошего сна я вижу, что не так.Я использую неверный источник изображения при создании изображения CGвопрос, потому что после исправления, я думаю, это разумный пример масштабирования изображения в Swift 4.2 в контексте Mac OS.

...