Непонятно, почему вы используете дополнительный уровень косвенности для dest
, поскольку *dest
не изменяется, но, скорее всего, вам нужно сделать следующее - изменить:
*dest[i] = (char)source[i];
*dest[i + 1] = (char)gray;
*dest[i + 2] = (char)gray;
*dest[i + 3] = (char)255;
до:
(*dest)[i] = (char)source[i];
(*dest)[i + 1] = (char)gray;
(*dest)[i + 2] = (char)gray;
(*dest)[i + 3] = (char)255;
Причиной этого является приоритет / ассоциативность операторов.
Также трудно понять, не видя вызывающего кода, но я предполагаю, что вам может потребоваться изменить:
(*dest)[i] = (char)source[i];
до:
(*dest)[i] = (char)source[i / 4];
если вы пытаетесь сделать что-то вроде преобразования изображения в одной плоскости в RGBA.