Не совсем понятен вопрос... Тебя интересует получение уникальных цветов в изображении или преобразование в палитру 256 цветов?
Если первое, то ты в общем сам себе ответил. Правда вариант с таким массивом затратный по используемой памяти, для 24 бит RGB еще терпимо, а вот для 32 бит RGBA такой вариант уже не пременим т.к. требует массив около 4 гигабайт. Можно рассматривать изображение как массив, достаточно выполнить сортировку и откинуть повторяющиеся цвета. Правильней всего использовать дерево, идеально подойдет
октодерево, реализация будет сложней, зато расход памяти и скорость будут оптимальными.