二进制表达式的操作数无效(' id'和' int')

时间:2014-08-19 15:35:23

标签: objective-c expression operands

我是这个客观的C代码,我试图在像素级别对图像应用色调效果。当我移位16位和8位然后相应地屏蔽以获得单独的通道时,我得到了这个错误。有人可以帮我吗?

-(void) Tint :(NSArray *)pixels :(int) intensity
{

    intensity+=20;
    int RY, BY, RYY, GYY, BYY, R, G, B, Y;
    double angle = (3.14 * (double)intensity) / 180;
    int index=0;
    int S = (int)(256 * sin(angle));
    int C = (int)(256 * cos(angle));
    int r,g,b;
    for (int y = 0; y < [p1 height]; y++)
        for (int x = 0; x < [p1 width]; x++)
        {
            r = ( [pixels objectAtIndex :x] >> 16 ) & 0xff;
            g = ( [pixels objectAtIndex :x] >> 8 ) & 0xff;
            b = [pixels objectAtIndex :x] & 0xff;
            index++;
        }
}

2 个答案:

答案 0 :(得分:1)

假设:NSArray充满了NSNumber;

NSNumber* rgNumber = [pixels objectAtIndex:x];

r = ([rgNumber intValue] >> 16) & 0xff;
g = ([rgNumber intValue] >> 8) & 0xff;

答案 1 :(得分:0)

objectAtIndex:会返回id类型的对象

我怀疑以像素存储的对象是NSNumbers。如果是这样,那么这就是你的意思。

int pixel = [pixels[x] intValue];
r = ( pixel >> 16 ) & 0xff;
相关问题