2016-02-20 1 views
6

J'essaie de dessiner des pixels d'image dans un contexte graphique pour itérer et imprimer les valeurs d'informations d'espace colorimétrique d'une image. J'ai réussi à mettre en mémoire tampon toutes les valeurs de pixels brutes. Mais mes tentatives dessiner l'image bitmap en utilisant CGImageCreate ont frappé l'accroche avec l'erreur suivante, également screenshot attached. C'est mon code écrit.CGImageCreate donne une erreur dans swift

func createRGBAPixel(inImage: CGImageRef) -> CGContextRef { 
//Image width, height 

let pixelWidth = CGImageGetWidth(inImage) 
let pixelHeight = CGImageGetHeight(inImage) 

//Declaring number of bytes 

let bytesPerRow = Int(pixelWidth) * 4 
let byteCount = bytesPerRow * Int(pixelHeight) 

//RGB color space 

let colorSpace = CGColorSpaceCreateDeviceRGB() 

//Allocating image data 

let mapData = malloc(byteCount) 
let mapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue) 

//Create bitmap context 

let context = CGBitmapContextCreate(mapData, pixelWidth, pixelHeight, Int(8), Int(bytesPerRow), colorSpace, mapInfo.rawValue) 

let imageRef = CGBitmapContextCreateImage(context) 


CGContextDrawImage(context, CGRectMake(0, 0, pixelWidth, pixelHeight), imageRef) 


let data = CGDataProviderCopyData(CGImageGetDataProvider(imageRef)) as! NSData 
let pixels = UnsafePointer<UInt8>(data.bytes) 
var newPixelsArray = [UInt8](count: byteCount, repeatedValue: 0) 
let provider = CGDataProviderCreateWithData(nil , &newPixelsArray, data.length, nil) 
let newImageRef = CGImageCreate(pixelWidth, pixelHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBitsPerPixel(imageRef), bytesPerRow, colorSpace, mapInfo, provider, nil, false, kCGRenderingIntentDefault) 


return context! 

CGImageCreate donne erreur à "kCGRenderingIntentDefault" disant "identifiant non résolu". J'ai aussi importé coreGraphics, il n'accepte aucune valeur à cet endroit. Que peut-on suggérer?

Aidez-nous s'il vous plaît.

+0

J'ai réussi à corriger CGContextDrawImage par coulée de type avec CGFloat (variables). Mais maintenant les valeurs KCGRenderingIntent pour CGImageCreate donnent du temps. –

+0

Cela ne devrait-il pas être .RenderingIntentDefault dans Swift? –

+0

L'aide de CGColorRenderingIntent.RenderingIntentDefault a aidé. Génial. Je vous remercie. Glenn Howes, vous pouvez le poster comme une réponse pour que je puisse l'accepter? –

Répondre

6

En raison de ce que le SDK Swift fait à énumérations comme celui-ci, vous devrez remplacer kCGRenderingIntentDefault avec .defaultIntent comme dans:

let newImageRef = CGImageCreate(pixelWidth, pixelHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBitsPerPixel(imageRef), bytesPerRow, colorSpace, mapInfo, provider, nil, false, .defaultIntent) 
+0

notez que dans swift 3, ceci est maintenant '.defaultIntent' – Guig

+0

Merci, j'ai mis à jour pour le montrer. –