从原始像素创建图像,但无法根据 RGBA 十六进制值显示颜色
Create an image from raw pixels, but color is not able to displayed according byRGBA hex value
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue)
let bitmap = CGBitmapContextCreate(nil, 192, 192, 8, 0, colorSpace,bitmapInfo.rawValue)
let bitmapData = UnsafeMutablePointer<UInt32>(CGBitmapContextGetData(bitmap))
var j = 0
for var i = 0; i < 192; i++ {
for j = 0; j < 192; j = j + 16 {
for var k = 0; k < 16; k++ {
let offset = matrix.rows * i + j + k
if(k < 4){
bitmapData[offset] = 0xff0000ff //red
}
else{
bitmapData[offset] = 0xffff00ff //yellow
}
}
}
}
let imageRef = CGBitmapContextCreateImage(bitmap)
let image = UIImage(CGImage: imageRef!)
以上是我从原始像素创建图像的代码。我设置的颜色是 0xff0000ff 和 0xffff00ff。但是在UIimageview中显示图片时,会出现一些随机颜色或者无法显示颜色。
例如,当前颜色为 0xffff00ff 和 0xff0000ff,但我的应用显示如下:
有人知道如何为位图设置颜色吗?
我在你的输出中看到了红色和洋红色。你说你使用了颜色值 0xffff00ff
和 0xff0000ff
。因此我推断您的位图中的字节顺序是 ABGR。
如果您将 bitmapInfo 更改为 CGBitmapInfo.ByteOrder32Little.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue
,您将获得您期望的字节顺序。
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue)
let bitmap = CGBitmapContextCreate(nil, 192, 192, 8, 0, colorSpace,bitmapInfo.rawValue)
let bitmapData = UnsafeMutablePointer<UInt32>(CGBitmapContextGetData(bitmap))
var j = 0
for var i = 0; i < 192; i++ {
for j = 0; j < 192; j = j + 16 {
for var k = 0; k < 16; k++ {
let offset = matrix.rows * i + j + k
if(k < 4){
bitmapData[offset] = 0xff0000ff //red
}
else{
bitmapData[offset] = 0xffff00ff //yellow
}
}
}
}
let imageRef = CGBitmapContextCreateImage(bitmap)
let image = UIImage(CGImage: imageRef!)
以上是我从原始像素创建图像的代码。我设置的颜色是 0xff0000ff 和 0xffff00ff。但是在UIimageview中显示图片时,会出现一些随机颜色或者无法显示颜色。
例如,当前颜色为 0xffff00ff 和 0xff0000ff,但我的应用显示如下:
有人知道如何为位图设置颜色吗?
我在你的输出中看到了红色和洋红色。你说你使用了颜色值 0xffff00ff
和 0xff0000ff
。因此我推断您的位图中的字节顺序是 ABGR。
如果您将 bitmapInfo 更改为 CGBitmapInfo.ByteOrder32Little.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue
,您将获得您期望的字节顺序。