ios – 在Swift中将UIImage转换为UInt8数组

ios – 在Swift中将UIImage转换为UInt8数组,第1张

概述所有! 我一直在对此进行大量研究,并且已经将几种不同的解决方案集成到我的项目中,但它们似乎都没有.我目前的解决方案是从this thread借来的. 但是,当我运行我的代码时,会发生两件事: >像素阵列保持初始化但未填充(全0) >我得到两个错误: CGBitmapContextCreate:不支持的参数组合:设置CGBITMAP_CONTEXT_LOG_ERRORS环境变量以查看详细信息 和 C 所有!

我一直在对此进行大量研究,并且已经将几种不同的解决方案集成到我的项目中,但它们似乎都没有.我目前的解决方案是从this thread借来的.

但是,当我运行我的代码时,会发生两件事:

>像素阵列保持初始化但未填充(全0)
>我得到两个错误:

CGBitmapContextCreate:不支持的参数组合:设置CGBITMAP_CONTEXT_LOG_ERRORS环境变量以查看详细信息

CGContextDrawImage: invalID context 0x0. If you want to see the backtrace,please set

有任何想法吗?这是我当前构建的函数,我正在调用我的Image类:

init?(fromImage image: UIImage!) {    let imageRef = image!.CGImage    self.wIDth = CGImageGetWIDth(imageRef)    self.height = CGImageGetHeight(imageRef)    let colorspace = CGcolorSpaceCreateDeviceRGB()    let bytesPerRow = (4 * wIDth);    let bitsPerComponent :UInt = 8    let pixels = UnsafeMutablePointer<UInt8>(malloc(wIDth*height*4))    var context = CGBitmapContextCreate(pixels,wIDth,height,Int(bitsPerComponent),bytesPerRow,colorspace,0);    CGContextDrawImage(context,CGRectMake(0,CGfloat(wIDth),CGfloat(height)),imageRef)

任何指针都会有很大的帮助,因为我不熟悉所有这些CGBitmap的工作原理.

万分感谢!

解决方法 您不应该将0作为CGBitmapContextCreate的bitmAPInfo参数传递.对于RGBA,您将传递CGImageAlphaInfo.PremultiplIEdLast.rawValue.

支持的bitsPerComponent,colorspace和bitmAPInfo组合可以在这里找到:
 https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB

请注意,每像素32位(bpp)是每像素4个字节,您可以使用它来计算bytesPerRow

总结

以上是内存溢出为你收集整理的ios – 在Swift中将UIImage转换为UInt8数组全部内容,希望文章能够帮你解决ios – 在Swift中将UIImage转换为UInt8数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存