362
14 июля 2005 года
_kolyan
339 / / 03.12.2002
Честно сразу скажу я сам такого не делал, но если бы мне приспичило, то попробовал бы сначала такой вариант: Можно вычислить среднее по каналам R, G и B для каждого пикселя. Это будет то серый цвет который пиксель должен приобрести в конце. Например RGB(240,10,150) -> RGB(133,133,133) (240+10+150)/3~133. Эксперементально можно определить насколько это среднее нужно сместить вверх или вниз, если цвет не устроит. Потом определить число шагов, за которое тебуется достичь этого цвета, например 10 и определить шаг изменения по каждому каналу. для каждого пискселя. Проще всего эти шаги сохранить в отдельном изображении. (11,12,1) для нашего пискселя. Еще нам понадобится матрица знаков для каждого канала каждого пискселя, которая будет определять, что нужно сделать с шагом, в нашем случае (0,1,0) 0 - отнять, 1 - прибавить. Ну далее циклически изменять исходное изображение каждый раз на шаг.
Сразу предупреждение: если все это делать при помощи свойства Pixels
[j], то будет сильно тормозить
Вот это тупо, влоб, первое, что пришло в голову. Но главое же начать :-)