2016-05-04 8 views
0

Я начинал с iOS и следил за How can I manipulate the pixel values in a CGImageRef in Xcode, чтобы узнать об изменениях CGImages. Я немного изменил код, так что средний пиксель на изображении должен быть окрашен в красный цвет вместо замены синих и красных буферов для каждого пикселя.Плохой приемник типа 'CGImageRef' (aka 'CGImage *')

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