2015-04-02 4 views
0

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, но ни один из них не работает.

Любая идея, как я должен делать, пожалуйста? заранее спасибо!

ответ

0

Посмотрите на CGBitmapContextCreate. (в xCode CMD + щелкните правой кнопкой мыши, я думаю, чтобы посмотреть документацию)

Был ли установлен размер size_t bytesPerRow для этих случаев? RGBA 8 + 8 + 8 + 8 бит длиной, только Альфа 8

CGContextRef CGBitmapContextCreate (недействительными * данные, size_t ширина, высота size_t, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef пространства, CGBitmapInfo BITMAPINFO);

Смежные вопросы