如何将(OS_dispatch_data*)5018112字节转换为NSData以放入UIImage

Pat*_*cia 10 opencv objective-c uiimage dispatch-async

我一直在寻找一个答案,有些人似乎可能是我需要的,但我不确定.我发现了这个问题#9152851和这个问题#2617625并在一堆链接上探讨了但我需要一些方向.

本质上,我正在调度异步调用以使用OpenCV处理图像.您可以通过此处的代码看到我将其转换为NSData*,然后再将其发送回我的代理人.

NSData *proccessedData = [NSData dataWithBytes:processedImage.data length:(processedImage.rows * processedImage.cols)];        
[self.delegate onProcessedBitmapReady:proccessedData withFocusQuality:focusQuality];
Run Code Online (Sandbox Code Playgroud)

但是当我回到我的委托时,我的processedBitmap是类型(OS_dispatch_data*)并包含一个字节值.所以,当我尝试设置UIImage时,它被设置为null.

- (void)onProcessedBitmapReady:(NSData *)processedBitmap withFocusQuality:(double)focusQuality
{
    //Use comverted image from self.captureCommand onComplete
    UIImage *image = [[UIImage alloc] initWithData:processedBitmap];
    [self saveImage:image];
}
Run Code Online (Sandbox Code Playgroud)

以下是值的屏幕截图:

Imgur

那么,我如何将这些字节(或者它们是什么)转换成我可以填充到UIImage中的东西呢?

预先感谢您的帮助.

-------------------------------------------------- ----- 添加新图像 -----------------------------------------

我的字节

这个新图片有帮助吗?

谢谢.

Jus*_*Sid 11

NSData实际上是一个只提供接口的类集群,它有很多特殊的实现.看起来这OS_dispatch_data是一个特殊的实现,用于在块周围传递数据对象,特别是因为你的UIImage创建不会崩溃(如果你将它传递给非NSData对象,或者只是垃圾内存).相反,它看起来好像UIImage根本无法识别图像所在的格式!

顺便说一下,Apple有一个很好的关于类集群概念的指南,可以在这里找到.

  • 具体来说,OS_dispatch_data是来自libdispatch的dispatch_data_t.在iOS 7和Mavericks中,调度数据可以自由地转换为NSData,实际上是NSData子类(当且仅当在此过程中链接Foundation时). (6认同)