通过在Swift中将元素映射到结构来填充缓冲区

时间:2015-08-04 06:41:28

标签: swift uiimage

我试图通过将UnsafeMutablePointer<Void>映射到以下结构来填充具有RGBA值的图像的像素缓冲区

struct Color {
    var red:CGFloat
    var green:CGFloat
    var blue:CGFloat
    var alpha:CGFloat
}

然后循环像素

func fillImage (pixelData:UnsafeMutablePointer<Void>, numBytes:Int) {
    var pixels = UnsafeMutablePointer<Color>(pixelData)
    let numPixels = Int(numBytes / sizeof(Color))
    for i in 0...numPixels-1 {
        pixels[i] = Color(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
    }
}

我希望我的图像完全是红色,但像素是绿色的。将1.0移动到绿色或蓝色位置也不起作用。我能够使用UnsafeMutablePointer<Float>(pixelData)一次正确设置一个浮动像素颜色,但显然使用Color struct会更容易。

1 个答案:

答案 0 :(得分:1)

在所有64位设备(例如iPhone 5s和更高版本)上,CGFloat 64位浮点数。如果要使用创建RGBA数据 4字节浮点值,您必须将CGFloat替换为Float 在颜色结构中。