我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。
在我的应用程序上,我有一些 C++ 图像识别软件,我正在尝试保存此 C++ 函数识别的图像。
我有这个数组来存储识别的图像:
int _detectedImages[NSMaxNumDetections ][NSPatchSize * NSPatchSize];
我这样调用 C++ 函数:
numberOfDetections = nativeDetect(_resultImages);
通过以下代码,我尝试将数据从 _detectedImages
转换为 UIImage
。
for (int index = 0; index < numberOfDetections; index++)
{
if (_resultImages[index] != nil)
{
NSData* imageData = [NSData dataWithBytes:&_resultImages[index] length:sizeof(_resultImages[index])];
NSLog(@"##### Image data size: %d", [imageData length]);
UIImage* newImage = [UIImage imageWithData:imageData];
_lastDetectedSignImages[index] = newImage;
}
}
在日志中我得到这个:
#### Image data size: 2304
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM setObject:atIndex:]: object cannot be nil'
*** First throw call stack:
newImage
为零,但 imageData
有数据。
当我尝试从该数据获取 UIImage
时,我是否做错了什么?
另一种可能性是我的 C++ 识别软件做错了什么,但我不会在这里向您展示该代码(抱歉,它是受版权保护的)。
或者我没有将 _resultImages
正确传递给 nativeDetect
。
最佳答案
几乎可以肯定,您的 C++ 图像采用某种位图格式 - RGBA 等。因此,您的第一个任务是弄清楚该格式是什么(以及字节顺序!)。有了这些信息,您就可以使用 CGImageCreate() 创建 CGImageRef。这样你就可以创建一个 UIImage。
关于ios - UIImage imageWithData 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273511/