问题是我可以使用以下代码获取像素信息但无法回写。
var pixelsCopy:[UInt8] = []
let data: NSData = cgImage!.dataProvider!.data!
var pixels = data.bytes.assumingMemoryBound(to: UInt8.self)
while index < widthOfImage * heightOfImage * 4 {
pixelsCopy.append( pixels[index] )
pixelsCopy.append( pixels[index + 1] )
pixelsCopy.append( pixels[index + 2] )
pixelsCopy.append( pixels[index + 3] )
index += 4
}
回写后,我的意思是跟随
pixels[index] = newRedValue
我有“下标get-only”错误。 我记得,我们可以在Obj-C上做到这一点。
答案 0 :(得分:0)
这是一种答案。
我无法更改像素数组,但我创建了pixelCopy数组播放该数组的RGB和Alpha值,然后首先创建一个CGImage然后创建一个UIImage。
但有时候最终的影像会变得扭曲,我不知道为什么。
要将pixelsCopy数组转换为CGImage,我使用了此代码
let numComponents = 4
let lenght = givenImageWidth * givenImageHeight * numComponents
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let colorspace = CGColorSpaceCreateDeviceRGB()
let rgbData = CFDataCreate(nil, pixelsCopy, lenght)!
let provider = CGDataProvider(data: rgbData)!
let rgbImageRef = CGImage(width: size_w,
height: size_h,
bitsPerComponent: 8,
bitsPerPixel: 8 * numComponents,
bytesPerRow: givenImageWidth * numComponents,
space: colorspace,
bitmapInfo: bitmapInfo,
provider: provider,
decode: nil,
shouldInterpolate: true,
intent: CGColorRenderingIntent.defaultIntent)!
let finalUIImage = UIImage(cgImage: rgbImageRef)
anImageView.image = finalUIImage
pixelsCopy.removeAll()
如果你想看到好的和扭曲的图像,请查看下面图像底部的R字母。
左边的R是给定的图像,右边的是我的finalUIImage图像。
答案 1 :(得分:0)
您无法将像素写回CGImage
。 CGImage
是只读的。你需要:
CGContext
。