Неверный тип получателя «CGImageRef» (также известный как «CGImage *»)

Я новичок в iOS и следил за Как я могу манипулировать значениями пикселей в CGImageRef в Xcode, чтобы научиться изменять CGImages. Я немного изменил код, чтобы средний пиксель изображения окрашивался в красный цвет вместо того, чтобы менять местами синий и красный буферы для каждого пикселя.

Но теперь я получаю сообщение об ошибке «CGImageRef» (также известное как «CGImage *») типа «Плохой получатель» при отправке сообщения с помощью

    manipulated = [imageRef colorMiddle];

в этой функции:

    - (void)renderColorFrame:(CMSampleBufferRef)sampleBuffer
     {

 CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);

size_t cols = CVPixelBufferGetWidth(pixelBuffer);
size_t rows = CVPixelBufferGetHeight(pixelBuffer);
    
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

unsigned char *ptr = (unsigned char *) CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);

NSData *data = [[NSData alloc] initWithBytes:ptr length:rows*cols*4];
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

CGBitmapInfo bitmapInfo;
bitmapInfo = (CGBitmapInfo)kCGImageAlphaNoneSkipFirst;
bitmapInfo |= kCGBitmapByteOrder32Little;

CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);

CGImageRef imageRef = CGImageCreate(cols,
                                    rows,
                                    8,
                                    8 * 4,
                                    cols*4,
                                    colorSpace,
                                    bitmapInfo,
                                    provider,
                                    NULL,
                                    false,
                                    kCGRenderingIntentDefault);



//hier image ref verarbeiten!!
manipulated = [imageRef colorMiddle]; //here

leftImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(0, 0, self.view.frame.size.width * 6/7, self.view.frame.size.height));

rightImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(self.view.frame.size.width / 7, 0, self.view.frame.size.width * 6/7, self.view.frame.size.height));

    //left image
_colorImageViewL.image = [[UIImage alloc] initWithCGImage:leftImage/*imageRef*/];
    
    //right image
_colorImageViewR.image = [[UIImage alloc]initWithCGImage:rightImage/*imageRef*/];

//Full
 //  _colorImageViewFull.image = [[UIImage alloc]initWithCGImage:imageRef];


CGImageRelease(imageRef);
CGImageRelease(leftImage);
CGImageRelease(rightImage);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);

}

Я не понимаю, почему я получаю эту ошибку здесь, потому что сообщение должно быть отправлено с соответствующими аргументами:

        @interface ViewController () <AVCaptureVideoDataOutputSampleBufferDelegate> {
        
        STSensorController *_sensorController;
        
        AVCaptureSession *_avCaptureSession;
        AVCaptureDevice *_videoDevice;
    
        UIImageView *_depthImageView;
        //UIImageView *_depthImageView2;
        //UIImageView *_normalsImageView;
        
        //Left
        UIImageView *_colorImageViewL;
        
        //right
        UIImageView *_colorImageViewR;
        
        //Full
        //UIImageView *_colorImageViewFull;
        
        uint16_t *_linearizeBuffer;
        uint8_t *_coloredDepthBuffer;
        uint8_t *_normalsBuffer;
        
        STNormalEstimator *_normalsEstimator;
        
        UILabel* _statusLabel;
        
        GLKMatrix4 _projection;
        
        CGImageRef leftImage;
        CGImageRef rightImage;
        CGImageRef manipulated;
        
       
        
        
        AppStatus _appStatus;

    }
    
    - (BOOL)connectAndStartStreaming;
    - (void)renderDepthFrame:(STDepthFrame*)depthFrame;
    - (void)renderNormalsFrame:(STDepthFrame*)normalsFrame;
    - (void)renderColorFrame:(CMSampleBufferRef)sampleBuffer;
    - (void)setupColorCamera;
    - (void)startColorCamera;
    - (void)stopColorCamera;
    - (CGImageRef)colorMiddle:(CGImageRef)image; //here

@end 

Кто-нибудь знает, что вызывает ошибку и как это исправить? Я просто не могу ничего придумать, потому что все остальное, где используются CGImageRefs, работает просто отлично, и, насколько я знаю, это должен быть правильный способ сделать это.

Пожалуйста, посмотрите на плохой внешний вид этого вопроса, так как мне все еще нужно научиться правильно форматировать все.

Заранее спасибо!


person seko    schedule 04.05.2016    source источник


Ответы (1)


Ваша линия:

manipulated = [imageRef colorMiddle];

должно быть:

manipulated = [self colorMiddle:imageRef];

colorMiddle: — это метод вашего класса ViewController.

person rmaddy    schedule 04.05.2016