2016-02-20 26 views
6

Bir görüntünün renk boşluğu bilgi değerlerini yinelemek ve yazdırmak için görüntü piksellerini grafik bağlamına çizmeye çalışıyorum. Tüm ham piksel değerlerini arabellemeyi başardım. Ama benim girişimleri CGImageCreate kullanarak bitmap görüntü çizme, aşağıdaki hata, aynı zamanda screenshot attached ile çarptı. Bu benim yazım kodum.CGImageCreate hızlı bir şekilde hata veriyor

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 "çözülmemiş bir tanımlayıcı" diyerek "kCGRenderingIntentDefault" de hata veriyor. CoreGraphics'i de ithal ettim, bu yerde herhangi bir değeri kabul etmiyor. Ne önerilebilir?

Lütfen

Yardım edin. Çünkü Swift SDK böyle sıralamaların ne yaptığının

+0

Ben CGFloat (değişkenler) ile tip döküm tarafından CGContextDrawImage düzeltmek başarmış. Ama şimdi CGImageCreate için KCGRenderingIntent değerleri zor zaman veriyor. –

+0

Swift'de .RenderingIntentDefault olması gerekmiyor mu? –

+0

CGColorRenderingIntent.RenderingIntentDefault kullanımı yardımcı oldu. Harika. Teşekkür ederim. Glenn Howes, bunu cevap olarak gönderebilsin diye kabul edebilir miyim? –

cevap

6

, sen gibi .defaultIntent ile kCGRenderingIntentDefault değiştirmek gerekecek:

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

notu 3'te, bu şimdi '.defaultIntent' – Guig

+0

olduğunu not edin, bunu göstermek için güncelledim. –

İlgili konular