Если этот код работает медленно, почему бы не попробовать переписать его
void clear_alpha(unsigned char*bits, int width, int height)
{
for(int j=0; j<height; j++)
for(int i=0; i<width; i++)
{
bits[j][i][4] = 0; // this should be [3]
}
}
Не уверен, что оптимизатор сделал, но индексирование умножается. Вы можете легко заменить 3 умножения в цикле
void clear_alpha(unsigned char*bits, int width, int height)
{
char *bits_ptr = bits + 3;
char *bits_end = bits + height * width * 4;
for(; bits_ptr < bits_end; bits_ptr += 4) {
*bits_ptr = 0;
}
}
Я не запускал это - проверь мою работу, чтобы убедиться, что ты не пересекаешь конец. Теперь вместо 3 умножений у вас есть одно прибавление. Я предполагаю, что ваше третье измерение - 5 (правка: исправлено на основе комментариев), но вы должны это исправить, если я ошибаюсь.