从CGImageRef创建的UIImage因UIImagePNGRepresentation而失败

Ari*_*.R. 13 iphone uiimage cgimage nsdata

我正在使用以下代码来裁剪并创建一个更大的UIImage.我已经将问题与CGImageCreateWithImageInRect()函数隔离开来,它似乎没有按照我想要的方式设置一些CGImage属性.:-)问题是调用函数UIImagePNGRepresentation()失败返回nil.

CGImageRef origRef = [stillView.image CGImage];
CGImageRef cgCrop = CGImageCreateWithImageInRect( origRef, theRect);
UIImage *imgCrop = [UIImage imageWithCGImage:cgCrop];
Run Code Online (Sandbox Code Playgroud)

...

NSData *data = UIImagePNGRepresentation ( imgCrop);
Run Code Online (Sandbox Code Playgroud)

- libpng错误:没有IDAT写入文件

知道UIImage中裁剪矩形可能有什么不妥或替代吗?非常感谢!

Ada*_*ach 1

在 PNG 中存在各种块,一些包含调色板信息,一些实际图像数据和一些其他信息,这是一个非常有趣的标准。IDAT块是实际包含图像数据的位。如果没有“IDAT 写入文件”,则 libpng 从输入数据创建 PNG 时遇到一些问题。

我不知道你的 stillView.image 到底是什么,但是当你向你的代码传递一个肯定有效的 CGImageRef 时会发生什么?theRect 中的实际值是多少?如果你的 theRect 超出了图像的边界,那么你试图用来制作 UIImage 的 cgCrop 很容易为零 - 或不为零,但不包含图像或宽度和高度为 0 的图像,使 libpng 无法工作和。