AS3 изменение H/S/B/C цвета

я пытаюсь создать простое приложение для рисования, которое позволяет пользователю изменять оттенок, насыщенность, яркость и контрастность своего цвета с помощью ползунков. Я искал вокруг, и это все, что я придумал, и мне нужна помощь, чтобы определить, почему это не работает.

var colourFilter:AdjustColor = new AdjustColor();
var mColourMatrix:ColorMatrixFilter;
var mMatrix:Array;

brightSL.addEventListener(SliderEvent.CHANGE,changecol) // brightSL would be the brightness slider
contSL.addEventListener(SliderEvent.CHANGE,changecol)
satSL.addEventListener(SliderEvent.CHANGE,changecol)
hueSL.addEventListener(SliderEvent.CHANGE,changecol)


function changecol (SliderEvent):void {
colourFilter.brightness = brightSL.value;
colourFilter.contrast = contSL.value;
colourFilter.saturation = satSL.value;
colourFilter.hue = hueSL.value;

mMatrix = colourFilter.CalculateFinalFlatArray();
mColourMatrix= new ColorMatrixFilter(mMatrix);

selectedColor.filters = [mColourMatrix]; // selectedColor is the color the user is currently using
    board.graphics.lineStyle(sizeSlider.value, selectedColor, alphaSlider.value)
  }

Проблема в том, что цвет не меняется, и я не знаю, почему. Будем признательны за любую помощь.


person user3418126    schedule 18.04.2014    source источник
comment
После того, как все ползунки были перемещены хотя бы один раз, вы видите какие-либо изменения?   -  person Conduit    schedule 20.04.2014


Ответы (1)


Я не абсолютно уверен, но считаю, что проблема заключается в том, что вы не гарантируете, что все свойства объекта AdjustColor установлены после создания экземпляра. Попробуйте изменить

var colourFilter:AdjustColor = new AdjustColor();
var mColourMatrix:ColorMatrixFilter;
var mMatrix:Array;

to

var colourFilter:AdjustColor = new AdjustColor();
colourFilter.brightness = 0;
colourFilter.contrast = 0;
colourFilter.saturation = 0;
colourFilter.hue = 0;
var mColourMatrix:ColorMatrixFilter;
var mMatrix:Array;

Если это работает, но не соответствует вашему варианту использования, может помочь использование AdjustColor.AllValuesAreSet().

person Conduit    schedule 20.04.2014
comment
Извините за поздний ответ, я был немного занят, я получил две ошибки с вашим кодом, когда пытался его запустить. 1046: Тип не найден или не является константой времени компиляции: AdjustColor. и 1180: вызов возможно неопределенного метода AdjustColor. - person user3418126; 25.04.2014
comment
Похоже, вам тоже нужен импорт: import fl.motion.AdjustColor; - person Conduit; 26.04.2014
comment
Ну, это исправило ошибку, но ничего не изменилось, ползунки по-прежнему не работают :/ - person user3418126; 26.04.2014
comment
Странный. Возвращает ли трассировка colorFilter.AllValuesAreSet() значение true? Какой объект является selectedColor? Я предполагаю, что немного больше контекста поможет. - person Conduit; 27.04.2014
comment
Является ли AdjustColor мувиклипами? Если да, то именно поэтому он не работает. Я думаю, проблема заключается в том, к чему я применяю фильтр. Я применяю его к цвету, а не к изображению, поэтому я думаю, что это не сработает, однако я не уверен. Существуют ли другие способы изменить h/s/b/v цвета? - person user3418126; 27.04.2014
comment
Как цвет представлен в памяти? Беззнаковое целое (uint)? - person Conduit; 29.04.2014
comment
Если вам просто нужно отобразить цвет, возможно, вы можете использовать объект Bitmap или BitmapData? Фильтр и цвет было бы очень легко контролировать с помощью методов applyFilter и fillRect класса BitmapData соответственно. - person Conduit; 29.04.2014
comment
Ну, это будет приложение для рисования, так что цвет — лишь один из параметров стиля линий. Например graphics.linestyle(Size,Color,Alpha) у меня есть rgb ползунки, которые отлично работают, и они используются в качестве uint. И вы имеете в виду рисование на объекте Bitmap и изменение цвета объекта? Это изменило бы цвет всех нарисованных линий, что мне не нужно. Каждая линия должна иметь свой цвет. - person user3418126; 30.04.2014
comment
Позвольте мне немного подумать — я проделал МНОГО работы с API рисования, так что могу поспорить, что смогу что-нибудь придумать. - person Conduit; 03.05.2014
comment
Конечно :) Я очень ценю вашу помощь, я действительно новичок в ActionScript3, это первый язык, который я изучил. - person user3418126; 03.05.2014
comment
Вы пытаетесь использовать HSBC, чтобы добавить последние штрихи к изображению, или он применяется к цвету кисти пользователя? Если дело во втором случае, возможно, преобразование из оттенка-насыщенности-яркости или оттенка-насыщенности-значения было бы более подходящим? Я всегда считал HSBC скорее эффектом, чем свойством цвета. Хороший ресурс: en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation. - person Conduit; 05.05.2014