10

我一直在寻找这个问题的答案,有些似乎它们可能是我需要的,但我不确定。我找到了这个问题 #9152851和这个问题 #2617625并在一堆链接上戳了一下,但我需要一些指导。

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

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

但是当我回到我的委托时,我的处理位图是 (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];
}

这是值的屏幕截图:

伊姆古尔

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

预先感谢您的帮助。

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

我的字节

这个新图像有帮助吗?

谢谢你。

4

1 回答 1

11

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

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

于 2013-10-17T21:59:52.043 回答