首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><Error>:ImageIO: CGImageReadGetBytesAtOffset in UIImagePNGRepresentation

<Error>:ImageIO: CGImageReadGetBytesAtOffset in UIImagePNGRepresentation
EN

Stack Overflow用户
提问于 2015-03-01 08:41:38
回答 2查看 2K关注 0票数 1

关于这个错误,我能找到的唯一其他信息是here,这是没有帮助的。

当我试图保存图像时,我会得到以下错误。这似乎只发生在我有几个图像(~6)在一次。至于何时发生,它似乎也是完全随机的。有时一切都很好,有时它会在1张图片上失败,有时是3张,有时应用程序会在EXC_BAD_ACCESS错误中完全崩溃。

错误: ImageIO: CGImageReadGetBytesAtOffset:^^ ERROR ^^ CGImageSource是用数据大小: 1144891创建的-当前大小仅为: 1003855

下面是保存图像的代码:

代码语言:javascript
复制
- (void)saveWithImage:(UIImage *)anImage andFileName:(NSString *)aFileName {
    NSString *subDirectory = @"Images";
    NSString *fileName = [aFileName stringByAppendingString:@".png"];

    NSString *documentsPath = [[CMAStorageManager sharedManager] documentsSubDirectory:subDirectory].path;
    NSString *imagePath = [subDirectory stringByAppendingPathComponent:fileName];
    __block NSString *path = [documentsPath stringByAppendingPathComponent:fileName];
    __block NSData *data = UIImagePNGRepresentation(anImage);

    self.image = anImage;
    self.tableCellImage = anImage;
    self.galleryCellImage = anImage;
    self.imagePath = imagePath; // stored path has to be relative, not absolute (iOS8 changes UUID every run)

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        if (![data writeToFile:path atomically:YES])
            NSLog(@"Error saving image to path: %@", path);

        dispatch_async(dispatch_get_main_queue(), ^{

        });
    });
}

我得到了这个错误,结果我的图像没有保存(或者只有一半被保存),这完全破坏了UI的显示,任何后续的应用程序都会启动。我把范围缩小到了UIImagePNGRepresentation电话。

相关的一点是,这段代码锁定了UI;我认为是因为UIImagePNGRepresentation调用;然而,据我所知,UIImagePNGRepresentation并不是线程安全的,所以我不能在后台执行。有谁知道怎么绕过这件事吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-01 23:45:39

如果有人遇到类似的问题,这就是我的解决办法。

mapData 'open' failed

这是我用来在后台线程中保存UIImages的解决方案:

Convert UIImage to NSData without using UIImagePngrepresentation or UIImageJpegRepresentation

票数 0
EN

Stack Overflow用户

发布于 2016-12-06 15:53:28

我得到这个错误是因为我调用的api在我试图转换为PNG的tmp >> NSData文件中抛出了一个500并返回html错误页。

您可能希望在转换之前检查您试图打开的文件是图像。

如果您正在用dowloadTask下载文件,那么在移动tmp >/Document/..png之前,先检查statusCode是200

heres my answer in other SO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28791625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档