首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在[UIImage initWithData:]中获取错误/警告

如何在[UIImage initWithData:]中获取错误/警告
EN

Stack Overflow用户
提问于 2011-07-22 17:33:54
回答 3查看 4.8K关注 0票数 3

我有一个基于RTSP/UDP的MJPEG流,我想从这个流中用UIImage initWithData:为UIImageView生成MJPEG。大多数情况下,这样做效果很好,但有时我会得到损坏的图像和日志消息,如:

代码语言:javascript
复制
ImageIO: <ERROR> JPEGCorrupt JPEG data: premature end of data segment

我的问题是:我如何(在运行时)看到这样的消息发生?不幸的是'initWithData‘没有错误输出,还有其他方法吗?

谢谢。

编辑:在这种情况下,initWithData会返回一个有效的UIImage对象,而不是nil!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-22 21:43:39

堆栈溢出上有一个与此类似的线程:Catching error: Corrupt JPEG data: premature end of data segment

解决方案是检查报头字节FF D8和结束字节FF D9。所以,如果你在NSData中有图像数据,你可以像这样检查它:

代码语言:javascript
复制
- (BOOL)isJPEGValid:(NSData *)jpeg {
    if ([jpeg length] < 4) return NO;
    const char * bytes = (const char *)[jpeg bytes];
    if (bytes[0] != 0xFF || bytes[1] != 0xD8) return NO;
    if (bytes[[jpeg length] - 2] != 0xFF || bytes[[jpeg length] - 1] != 0xD9) return NO;
    return YES;
}

然后,要检查JPEG数据是否无效,只需编写:

代码语言:javascript
复制
if (![self isJPEGValid:myData]) {
    NSLog(@"Do something here");
}

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2011-07-22 17:37:15

在这种情况下,initWithData:方法应该返回nil

尝试:

代码语言:javascript
复制
UIImage *myImage = [[UIImage alloc] initWithData:imgData];
if(!myImage) {
    // problem
}
票数 1
EN

Stack Overflow用户

发布于 2013-11-24 00:54:22

在这种情况下,我也遇到过同样的问题。

结果是,我将一个NSMutableData实例传递给全局队列进行解码。在解码过程中,NSMutableData中的数据被从网络接收到的下一帧所覆盖。

我已经通过传递数据的副本修复了错误。使用缓冲池来提高性能可能会更好:

代码语言:javascript
复制
    NSData *dataCopy = [_receivedData copy];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    ZAssert([self isJPEGValid:dataCopy], @"JPEG data is invalid"); // should never happen
    UIImage *image = [UIImage imageWithData:dataCopy];
    dispatch_async(dispatch_get_main_queue(), ^{
        // show image
    });
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6788138

复制
相关文章

相似问题

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