我使用Xcode并想将灰度图像加载到程序中,但我遇到了问题。CGContextDrawImage:当加载灰度图像时无效的上下文0x0
此前我已经将灰度IplImage(大小,8,1)转换为UIimage并存储为jpg。现在我想恢复过程来取回IplImage。
我获得的UIImage做
UIImage *uiimage1 = [UIImage imageNamed:@"IMG_1.JPG"];
然后我用下面的函数。
- (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {
// Getting CGImage from UIImage
CGImageRef imageRef = image.CGImage;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// Creating temporal IplImage for drawing
IplImage *iplimage = cvCreateImage(
cvSize(image.size.width,image.size.height), IPL_DEPTH_8U, 4
);
// Creating CGContext for temporal IplImage
CGContextRef contextRef = CGBitmapContextCreate(
iplimage->imageData, iplimage->width, iplimage->height,
iplimage->depth, iplimage->widthStep,
colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault
);
// Drawing CGImage to CGContext
CGContextDrawImage(
contextRef,
CGRectMake(0, 0, image.size.width, image.size.height),
imageRef
);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
// Creating result IplImage
IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);
cvCvtColor(iplimage, ret, CV_RGBA2BGR);
cvReleaseImage(&iplimage);
return ret;
}
也能正常工作,用于与标准的RGBA通道加载彩色图像,但是我有一些问题时,我想只用1个频道并没有alpha通道来加载灰度图像。
我试图然而改变色彩空间到CGColorSpaceCreateDeviceGray(),改变从4到1信道的数量和注释掉cvCvtColor和返回的IplImage *的IplImage直接
,我仍然有错误,CGContextDrawImage:无效背景为0x0
我觉得可能是有CGBitmapContextCreate和可能出毛病BITMAPINFO一个问题..
我尝试了一些组合,如kCGBitmapByteOrderDefault | kCGImageAlphaNone但他们没有工作。
任何想法我该怎么做,请吗?提前致谢!