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