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

Objective c 二进制表达式(';id';和';int';)的操作数无效,objective-c,expression,operands,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 in

我有一个目标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++;
        }
}
-(无效)着色:(NSArray*)像素:(int)强度
{
强度+=20;
in-RY,BY,RYY,GYY,BYY,R,G,B,Y;
双角度=(3.14*(双)强度)/180;
int指数=0;
int S=(int)(256*sin(角度));
int C=(int)(256*cos(角度));
int r,g,b;
对于(整数y=0;y<[p1高度];y++)
对于(int x=0;x<[p1宽度];x++)
{
r=([pixels objectAtIndex:x]>>16)和0xff;
g=([pixels objectAtIndex:x]>>8)和0xff;
b=[像素对象索引:x]&0xff;
索引++;
}
}

假设:NSArray中填充了NSNumber

NSNumber* rgNumber = [pixels objectAtIndex:x];

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

objectAtIndex:
返回类型为
id
的对象

我怀疑存储在像素中的对象是数字。如果是这样,那么这就是你想要做的

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

objectAtIndex
返回
id
。像素数组包含什么?将方法命名为“正常”并遵守一些术语会很有意思:
-(void)tintPixels:(NSArray*)带强度的像素:(int)强度