Неверный тип получателя "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, работает просто отлично, и, насколько я знаю, это должен быть правильный способ сделать это.

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

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

1 ответ

Решение

Ваша линия:

manipulated = [imageRef colorMiddle];

должно быть:

manipulated = [self colorMiddle:imageRef];

colorMiddle: это метод на вашем ViewController учебный класс.

Другие вопросы по тегам