Это аналогичный вопрос (без однозначного ответа), но в нем есть код для прямого доступа к пикселям из изображения.
Квантование изображения, сохранение списка оставшихся цветов
Вы должны сделать это, а не использовать функции CG для каждого пикселя get и set.Рисование 1 пикселя изображения на другом изображении намного медленнее, чем изменение 3 байтов в массиве.
Кроме того, что в ColorDiff - вам не нужно идеальное различие, если у ближайшего пикселя наименьшийразн.Может быть место для предварительной обработки этого списка, так что для каждой записи палитры у вас будет наименьшее различие с ближайшей другой записью палитры.Затем, просматривая пиксели, я могу быстро проверить, находится ли следующий пиксель в пределах половины этого расстояния от только что найденного цвета (поскольку фотографии, как правило, имеют общие цвета рядом друг с другом).
Если это не совпадает, то при циклическом проходе по палитре, если я нахожусь в пределах половины этого расстояния от какой-либо записи, нет необходимости проверять дальше.
По сути, это помещает зонувокруг каждой записи палитры, где вы точно знаете, что эта является ближайшей.