2016-02-20 21 views
6

Tôi đang cố gắng vẽ các pixel của hình ảnh vào ngữ cảnh đồ họa để lặp lại và in các giá trị thông tin không gian màu của hình ảnh. Tôi đã quản lý để đệm tất cả các giá trị pixel thô. Nhưng những nỗ lực của tôi vẽ hình ảnh bitmap bằng CGImageCreate đã ảnh hưởng đến lỗi sau, cũng là screenshot attached. Đây là mã của tôi được viết.CGImageCreate đang đưa ra lỗi trong 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 cung cấp lỗi tại "kCGRenderingIntentDefault" nói "từ định danh chưa được giải quyết". Tôi cũng đã nhập đồ họa cốt lõi, nó không chấp nhận bất kỳ giá trị nào tại nơi này. Những gì có thể được đề xuất?

Vui lòng trợ giúp.

+0

tôi đã quản lý để khắc phục CGContextDrawImage theo loại đúc với CGFloat (biến). Nhưng bây giờ giá trị KCGRenderingIntent cho CGImageCreate là cho thời gian khó khăn. –

+0

Không được .RenderingIntentDefault in Swift? –

+0

Sử dụng CGColorRenderingIntent.RenderingIntentDefault đã giúp. Tuyệt quá. Cảm ơn bạn. Glenn Howes, bạn có thể đăng nó như một câu trả lời để tôi có thể chấp nhận nó? –

Trả lời

6

Bởi vì những gì Swift SDK không để enumerations như thế này, bạn sẽ phải thay thế kCGRenderingIntentDefault với .defaultIntent như trong:

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

lưu ý rằng trong 3 nhanh chóng, bây giờ là '.defaultIntent' – Guig

+0

Cảm ơn, tôi đã cập nhật để hiển thị điều đó. –

Các vấn đề liên quan