我使用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但他們沒有工作。
任何想法我該怎麼做,請嗎?提前致謝!