Недопустимые операнды для двоичного выражения ("id" и "int")

У меня есть этот объективный код 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++;
        }
}

person user3863537    schedule 19.08.2014    source источник
comment
objectAtIndex возвращает id. Что содержит массив пикселей?   -  person CrimsonChris    schedule 19.08.2014
comment
Было бы интересно назвать методы нормально и соблюдать некоторую номенклатуру: -(void)tintPixels:(NSArray*)pixels withIntensity:(int)intensity.   -  person Larme    schedule 19.08.2014


Ответы (2)


Предположение: NSArray заполнен NSNumber;

NSNumber* rgNumber = [pixels objectAtIndex:x];

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

objectAtIndex: возвращает объект типа id.

Я подозреваю, что объекты, хранящиеся в пикселях, являются NSNumbers. Если так, то это то, что вы хотели сделать.

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