CGImageCreate在Swift中出错

7

我试图将图像的像素绘制到图形上下文中,以迭代并打印图像的颜色空间信息值。我已经成功缓存了所有原始像素值。但是,使用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,但它在这个地方不接受任何值。有什么建议吗?

请帮忙。


我已经通过将CGFloat(变量)进行类型转换成功地修复了CGContextDrawImage。但是现在,对于CGImageCreate的KCGRenderingIntent值让我很头疼。 - Rajesh Mappu
在 Swift 中应该不是 .RenderingIntentDefault 吗? - Glenn Howes
使用CGColorRenderingIntent.RenderingIntentDefault很有帮助。太好了,谢谢。Glenn Howes,您可以将其发布为答案,这样我就可以接受它了吗? - Rajesh Mappu
1个回答

7

由于Swift SDK对此类枚举的处理方式,您需要将kCGRenderingIntentDefault替换为.defaultIntent,例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接