i m используя xcode и хотел бы загрузить изображение в оттенках серого в программу, но у меня возникла проблема с ним.CGContextDrawImage: недопустимый контекст 0x0 при загрузке grayscaled image
Раньше я преобразовал 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, но у меня есть некоторые проблемы, когда я хочу, чтобы загрузить изображение в оттенках серого только один канал и без альфа-канала.
я попытался изменить цветовом к CGColorSpaceCreateDeviceGray(), изменить количество каналов от 4 до 1, и закомментировал cvCvtColor и вернуть IplImage * IplImage непосредственно
однако, я все еще есть ошибка, CGContextDrawImage: недействительным контекст 0x0
Я думаю, что может быть проблема с CGBitmapContextCreate и, вероятно, что-то не так с BITMAPINFO ..
я попробовал несколько комбинаций, таких как kCGBitmapByteOrderDefault | kCGImageAlphaNone, но ни один из них не работает.
Любая идея, как я должен делать, пожалуйста? заранее спасибо!