неразрешенный идентификатор kCGImageAlphaNone в swift


Я пытаюсь преобразовать изображения / текстуры (для SpriteKit) в оттенки серого с помощью CoreImage в Swift:

Я нашел такой ответ: https://stackoverflow.com/a/17218546/836501 который я пытаюсь преобразовать в swift для iOS7 / 8

Но kCGImageAlphaNone не существует. Вместо этого я могу использовать CGImageAlphaInfo.None , но функция CGBitmapContextCreate() не любит его в качестве последнего параметра. Я вынужден использовать перечисление CGBitmapInfo, но, похоже, внутри нет эквивалента kCGImageAlphaNone.

Это полная строка с неправильным параметр (последний):

var context = CGBitmapContextCreate(nil, UInt(width), UInt(height), 8, 0, colorSpace, kCGImageAlphaNone)
Мне просто нужен способ преобразовать UIImage в оттенки серого в Swift.
2 4

2 ответа:

Вы должны создать struct CGBitmapInfo из значения CGImageAlphaInfo.None:

let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.None.rawValue)
var context = CGBitmapContextCreate(nil, UInt(width), UInt(height), 8, 0, colorSpace, bitmapInfo)

Я считаю, что исходный код Objective-C был ошибочным. Значение kCGImageAlphaNone enum не было подходящим типом для передачи, но Objective-C менее типобезопасен (перечисление есть перечисление), поэтому он работал. Исходное значение kCGImageAlphaNone равно 0, поэтому передача CGBitmapInfo.allZeros или CGBitmapInfo.ByteOrderDefault (оба из которых имеют исходные значения 0) должна дать вам одинаковые результаты.