2016-02-20 19 views
6

イメージのピクセルをグラフィックスコンテキストに描画して、イメージの色空間情報の値を繰り返して出力しようとしています。私はすべての生のピクセル値をバッファリングすることに成功しました。しかし、CGImageCreateを使ってビットマップイメージを描画しようとすると、次のエラー(screenshot attached)が発生します。これは私の書かれたコードです。CGImageCreateが即座にエラーを返す

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は "未解決識別子" と言って "kCGRenderingIntentDefault" でエラーが発生します。私はcoreGraphicsもインポートしましたが、この場所では値を受け入れません。何が示唆できますか?

助けてください。そのためスウィフトSDKは、このような列挙に何をするかの

+0

私はCGFloat(変数)を持つタイプキャストでCGContextDrawImageを是正するために管理しています。しかし、今CGImageCreateのKCGRenderingIntentの値は苦労しています。 –

+0

Swiftでは.IntentDefaultをレンダリングするべきではありませんか? –

+0

CGColorRenderingIntent.RenderingIntentDefaultを使用すると助けになりました。すばらしいです。ありがとうございました。 Glenn Howes、答えとして投稿できるので、私はそれを受け入れることができますか? –

答えて

6

、あなたはのように.defaultIntentでkCGRenderingIntentDefaultを交換する必要があります:

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

速報3では、これは現在 '.defaultIntent'です – Guig

+0

ありがとう、私はそれを表示するように更新しました。 –

関連する問題