Я пытаюсь скопировать 1 или 2 цветных канала из данных изображения RGBA как можно быстрее (это самая медленная часть моего кода, и это замедляет работу всего приложения). Есть ли быстрый способ копирования с шагом?
Данные просто выложены как RGBARGBARGBA и т.д., и мне нужно скопировать только значения R, или в другом случае - только значения RG.
То, что я до сих пор, это примерно так, чтобы скопировать значения R:
for(int i=0; i<dataSize; i++){
dest[i] = source[i*4];
}
Для значений RG я делаю:
for(int i=0; i<dataSize; i+=2){
dest[i] = source[i*2];
dest[i+1] = source[(i*2)+1];
}
Все данные представляют собой неподписанные 1-байтовые значения. Есть ли более быстрый способ? Я уже частично развернул цикл (делая 64 значения за итерацию - незначительное ускорение за этим). Платформа - это Armv7 (iOS), поэтому использование NEON (SIMD) может оказаться полезным, к сожалению, у меня нет опыта!
Изменение данных, к сожалению, не имеет значения, оно обеспечивается функцией opengl readPixels(), и iOS не поддерживает чтение как L, LA, RG и т.д., насколько я мог сказать.