2016-05-04 3 views
0

Je suis un débutant iOS et suivait How can I manipulate the pixel values in a CGImageRef in Xcode pour apprendre à modifier CGImages. J'ai légèrement modifié le code afin que le pixel du milieu de l'image soit peint en rouge au lieu d'échanger les tampons bleu et rouge pour chaque pixel.Mauvais type de récepteur 'CGImageRef' (aka 'CGImage *')

Mais maintenant je le "Bad type de récepteur 'CGImageRef' (alias 'CGImage *)" erreur lors de l'envoi du message avec

manipulated = [imageRef colorMiddle]; 

dans cette fonction:

- (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); 

} 

Je don ne comprends pas pourquoi je reçois cette erreur ici, parce que le message doit être envoyé avec des arguments correspondants:

 @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 

Est-ce que quelqu'un sait quoi? provoque l'erreur et comment résoudre ce problème? Je ne peux tout simplement pas penser à quelque chose, parce que tout le reste où les CGImageRefs sont utilisés fonctionne très bien, et autant que je sache, cela devrait être la bonne façon de le faire.

S'il vous plaît regarder par-dessus les mauvais regards de cette question, car j'ai encore besoin d'apprendre à tout formater correctement.

Merci d'avance!

Répondre

1

Votre ligne:

manipulated = [imageRef colorMiddle]; 

doit être:

manipulated = [self colorMiddle:imageRef]; 

colorMiddle: est une méthode de votre classe ViewController.