通过将元素映射到 Swift 中的结构来填充缓冲区
Filling a Buffer by Mapping the Elements to Structure in Swift
我试图通过将 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
.
会更容易
在所有 64 位设备上(例如 iPhone 5s 及更高版本),CGFloat
是
64 位 浮点数。如果你想创建 RGBA 数据
4 字节浮点值,则必须将 CGFloat
替换为 Float
在颜色结构中。
我试图通过将 UnsafeMutablePointer<Void>
映射到以下结构
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
.
在所有 64 位设备上(例如 iPhone 5s 及更高版本),CGFloat
是
64 位 浮点数。如果你想创建 RGBA 数据
4 字节浮点值,则必须将 CGFloat
替换为 Float
在颜色结构中。