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

时间:2013-10-17 18:17:50

标签: objective-c opencv uiimage dispatch-async

我一直在寻找答案,有些人似乎可能是我需要的,但我不确定。我找到了这个Question #9152851Question #2617625并且在一堆链接上发现了但是我需要一些方向。

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

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

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

以下是值的屏幕截图:

Imgur

那么,如何将这些字节(或其他任何字节)转换为可以填充到UIImage中的字节?

提前感谢您的帮助。

----------------------------------------------- -------- 添加新图片 ------------------------------- ----------

My Bytes

这张新图片有帮助吗?

谢谢。

1 个答案:

答案 0 :(得分:10)

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

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