2016-03-04 2 views
1

У меня есть простая функция квантованияцвета квантования разбавляя чистые белые

public static int quantize(int oldpixel) { 

    int r = (oldpixel >> 16) & 0xff; 
    int g = (oldpixel >> 8) & 0xff; 
    int b = (oldpixel >> 0) & 0xff; 

    int color = 0xff << 24 | (((int) ((r)/32) * 32) & 0xff) << 16 | 
      (((int) ((g)/32) * 32) & 0xff) << 8 | 
      (((int) ((b)/32) * 32)& 0xff) << 0; 
    return color; 
} 

Что она делает это уменьшить цвет на более низкий цвет детализации, а затем расширяет его, это искусственно ограничивает поддон, и я буду использовать его для дрожание фильтр, изображение с помощью функции производит этот

В: Unquantized hue wheel Out: Quantized hue wheel

Это почти идеально подходит в качестве г esult, за исключением того, что белые восстанавливают до серого, я понимаю, причина мой пол разделенных цветов в алгоритме, но я не знаю, как это исправить, любые предложения будут оценены

enter image description here

enter image description here

+0

Вместо '/ 32 * 32', попробуйте'/32 * 33'. – immibis

+0

33 помогает незначительно, после игры с ним бит 36 является более высоким пределом и производит почти белый цвет, хотя проверка с помощью инструмента выбора цвета показывает его не совсем, но это будет хорошо работать как временное обходное решение, так как оно не влияет на черное, спасибо вы! – Nim

+0

На самом деле да, 36 будет правильным для 8 уровней. (Я думал о * 17 для 16 уровней) – immibis

ответ

0

После разделения каждого компонента на 32, то есть целое число от 0 до 7. вы пытаетесь отобразить это обратно в диапазоне от 0 до 255, так что 0 равен 0 и 7 255.

вы можете сделайте это, умножив его на 255/7, что составляет около 36.428.

Вы можете использовать что-то наподобие (int)((r/32) * (255.0/7.0)), но приведение уродливо на Java. Чтобы улучшить это, вы можете обернуть его в функцию и иметь quantizeChannel(r), quantizeChannel(g) и quantizeChannel(b). Или вы можете поменять порядок и использовать целочисленную арифметику: r/32 * 255/7.

+0

Огромное спасибо за объяснение, он отлично работает сейчас – Nim

 Смежные вопросы

  • Нет связанных вопросов^_^