2017-01-08 4 views
0

GPUImageフレームワークを使用して、一部のカメラ入力の平均赤色値を取得しています。私は、配列内の平均赤値のすべてを格納していて、私はこれをしようとしている:バイナリ式( "id"と "int")のオペランドが無効です

NSMutableArray *redValues = [NSMutableArray array]; 
__block int counter = 0; 

GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; 
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; 

GPUImageAverageColor *averageColor = [[GPUImageAverageColor alloc] init]; 
[averageColor setColorAverageProcessingFinishedBlock:^(CGFloat redComponent, CGFloat greenComponent, CGFloat blueComponent, CGFloat alphaComponent, CMTime frameTime) 
{ 
    NSLog(@"%f", redComponent); 
    [redValues addObject:@(redComponent)];   
    counter++; 
}]; 

for (int i = 0; i < counter; i++) 
{ 
    redValues[i] *= 255; // errors occurs here 
} 
+1

ところで、あなたが0と1の間の値として、ここで 'redComponent'を受けることになると思われます。これは、 'numberWithInt:'でそれを保存すると、ほぼすべての値を0に切り捨てることを意味します。後で255を掛けてもあまり役に立ちません。どうして '[redValues addObject:@(redComponent * 255)]'を直接呼びませんか?あなたはまた、後でループを排除することになります... –

+1

@ItaiFerber私はそれをアップヴォートできるように答えとして投稿してください。 – fi12

+1

なぜあなたの 'redValues'配列に' counter'を追加しますか?それはまったく動作しません。 'redComponent'を追加する必要があります。 '[redValues addObject:@(redComponent)];'。 – rmaddy

答えて

2

あなたはintNSNumberを乗算しようとしているので、あなたが得るエラーです。ただし、0と1の間の値としてredComponentを受け取っているという点でより深刻な論理的な問題があります。intに変換すると、ほぼすべての値が0に切り捨てられます(255を掛けてもそれほど役に立ちません)。代わりに、あなたは乗算をインライン(及び第二のループを排除する)必要があります。

averageColor.colorAverageProcessingFinishedBlock = ^(CGFloat redComponent, CGFloat greenComponent, CGFloat blueComponent, CGFloat alphaComponent, CMTime frameTime) { 
    NSLog(@"%f", redComponent); 
    [redValues addObject:@(redComponent * 255)]; 
}; 
関連する問題