gpt4 book ai didi

ios - CGContextDrawImage 和 swift

转载 作者:行者123 更新时间:2023-11-28 07:11:05 26 4
gpt4 key购买 nike

有时 CGContextDrawImage 会导致执行以下代码时出现“访问错误”我们无法找到原因。有没有人在使用“CGContextDrawImage”时遇到过同样的错误?

    let bytesPerPixel = 4;
let bytesPerRow:UInt = UInt(bytesPerPixel) * UInt(CG_Width)
let bitsPerComponent:UInt = 8;

let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)

var pixel = UnsafeMutablePointer<CUnsignedChar>.alloc(4)



let context = CGBitmapContextCreate(pixel,
UInt(CG_Width), UInt(CG_Width), bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo)



let cgRect:CGRect = CGRectMake (0,0,CGFloat(CG_Width),CGFloat(CG_Width)) as CGRect



CGContextDrawImage(context, cgRect, imageRef)

最佳答案

当您创建像素缓冲区时,您只分配了 4 个字节,这对于 1x1 位图来说足够了。据推测,CG_Width(CG_Height 在哪里使用?)不是 1,所以当您对 CGBitmapContextCreate 撒谎以了解缓冲区的大小,然后将其绘制到其中时,您将在随机内存中乱涂乱画。将缓冲区分配更改为:

var pixel = UnsafeMutablePointer<CUnsignedChar>.alloc(bytesPerRow * CG_Height)

然后更改上下文创建以使用正确的高度:

let context = CGBitmapContextCreate(pixel,
UInt(CG_Width), UInt(CG_Height), bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo)

如果您实际上是有意创建方形位图,请将我的 CG_Height 更改为 CG_Width

关于ios - CGContextDrawImage 和 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com