感谢任何帮助修复我的iOS应用程序中的崩溃(IOS)。我看到这一点,因为我的应用程序更新为iOS 8,使用最新可用的iOS 8.1.2。在iOS 7.x中,同样的代码运行得很好。
我的应用程序中的一个视图是UICollectionView。集合视图中的每个单元格都显示一个图像,该图像将动态呈现,并在每隔几分钟就会随着新内容的可用而发生变化。
单元格的左上角还显示集合视图中该单元格的文本标签/标题。为了确保基于单元格图像颜色的文本标签是可读的,我有一些代码(见下面)来确定单元格左上角图像的颜色。基于该颜色,我使用白色或黑色作为单元格的文本标签/标题(显示在单元格中图像的顶部)。
下面是代码片段。我经常在以下代码行中遇到崩溃的EXC_BAD_ACCESS崩溃:
CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), imageRef);
Xcode中显示的错误日志..。
:ImageIO: CGImageReadGetBytesAtOffset:* ERROR * CGImageSource是用数据大小: 684918创建的-当前大小仅为: 526399 :ImageIO: CGImageReadGetBytesAtOffset:* ERROR * CGImageSource是用数据大小: 203207创建的-当前大小仅为: 199641
代码如下,感谢任何帮助解决这个问题,谢谢。
-(UIColor *) averageColorOfImageTitleArea {
//CGRect croppedImageRect = CGRectMake (6,0,100,29);
CGRect croppedImageRect = CGRectMake (0,0,1,1);
CGImageRef imageRef = CGImageCreateWithImageInRect (self._collectionViewImage.image.CGImage,croppedImageRect);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char rgba[4];
CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), imageRef);
if(rgba[3] > 0) {
CGFloat alpha = ((CGFloat)rgba[3])/255.0;
CGFloat multiplier = alpha/255.0;
return [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier
green:((CGFloat)rgba[1])*multiplier
blue:((CGFloat)rgba[2])*multiplier
alpha:alpha];
}
else {
return [UIColor colorWithRed:((CGFloat)rgba[0])/255.0
green:((CGFloat)rgba[1])/255.0
blue:((CGFloat)rgba[2])/255.0
alpha:((CGFloat)rgba[3])/255.0];
}
CGContextRelease(context);
CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpace);
}发布于 2015-01-28 12:13:43
这也发生在我身上。在我的情况下剪照片的时候。我猜这是因为iCloud受到了暂时的网络故障的困扰。也许最好是提交一份错误报告。
发布于 2015-10-06 11:22:58
首先,对迟来的回答表示歉意,但也许这会对有同样问题的人有所帮助。主要原因是imageIO不能像您需要的那样快速加载图像--我的示例是重新排序UITableViewCell。也许这会对他的逻辑学有所帮助。并尝试将图像加载到NSData中,然后转换为UIImage。
例如,在cellForRowAtIndexPath中
let image = UIImagePNGRepresentation(self.imageArray[indexPath.row])
let returnImage = UIImage(data: image)因此,如果将returnImage加载到使用CGContext的imageIO func或func中,请尝试给出值returnImage。
发布于 2016-12-06 16:02:58
我得到这个错误是因为我调用的api在我试图转换为PNG的tmp >> NSData文件中抛出了一个500并返回html错误页。
我假设statusCode为200,而tmp是png。
您可能希望在转换之前检查您试图打开的文件是图像。
您可以检查文件的字节大小为199641并放入断点。
以下是我在下载图像时如何跟踪CGImageSource问题
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL){
print("didFinishDownloadingToURL[\(location) countOfBytesReceived:\(downloadTask.countOfBytesReceived)]")
if let httpResponse = downloadTask.response as? HTTPURLResponse{
if httpResponse.statusCode == 200{
//----------------------------------------------------------------------------------------
//200 - start
//----------------------------------------------------------------------------------------
if (downloadTask.countOfBytesReceived == 199641){
//bytesize metioned in
: ImageIO: CGImageReadGetBytesAtOffset : * ERROR * CGImageSource was created with data size: 203207 - current size is only: 199641
}else{
//----------------------------------------------------------------------------------------
//Image OK
//----------------------------------------------------------------------------------------
}
//----------------------------------------------------------------------------------------
//200 - 3nd
//----------------------------------------------------------------------------------------
}
else if httpResponse.statusCode == 500
{
//check the tmp file in location path
}else{
}
}else{
appDelegate.log.error("ERROR downloadTask.response NOT HTTPURLResponse for taskDescription:'\(cacheKeyString)' - 500")
}
}https://stackoverflow.com/questions/28019631
复制相似问题