|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: May 2008
Сообщений: 476
|
Метод beginGradientFill(). Баг или что то еще...
Здравствуйте уважаемые Форумчане!
У меня есть простой вопрос ответ на который никак не укладывается у меня в голове (наверно я тупой). Однако, мне очень желательно разобраться в этом вопросе. Вот, собственно, сам вопрос: "Известный метод класса MovieClip - beginGradientFill() принимает ряд параметров, два из которых это fillType и interpolationMethod. Так вот передав в метод в качестве fillType строковое значение linear, а в качестве значения interpolationMethod - linearRGB и задав в качестве параметра matrix - матрицу индентичности (по главной диагонали 1) вдруг выясняется, что середина "гигантского градиента" (от -819.2 до 819.2) т.е. в нулевой позиции значение цвета градиента вовсе не 128 (для одноцветного градиента - например, красного)". Если же я выставляю значение interpolationMethod в RGB - градиент становиться вдруг линейным. Что это баг или закономерное поведение метода?!!!
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
Здравствуй iNils!
Выкладываю тестовый код. Обрати внимание на следующее: 1. Клик на крайнем левом пикселе дает значение цвета 0x000000; 2. Клик на крайнем правом пикселе дает значение цвета 0xFF0000; 3. Клик на центральном пикселе дает значение цвета 0xBB0000 (R=0xBB=187), что не соответствует среднему значению цвета между 0 и 255 - 128. Это, собственно, и непонятно, поскольку в параметре interpolationMethod выставлено значение linearRGB. Заранее благодарен!
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Линейный градиент в цифрах как раз дает RGB, а linearRGB - визуально. Что хорошо видно в скринах хелпа.
import flash.geom.Matrix; import flash.display.BitmapData; var myClip:MovieClip = this.createEmptyMovieClip ("myClip", this.getNextHighestDepth ()); var w:Number = 2000; var myMatrix:Matrix = new Matrix (); myMatrix.createGradientBox (w, 900, 0, 0, 0); myClip.beginGradientFill ("linear", [0x000000, 0x0000FF], [100, 100], [0x00, 0xFF], myMatrix, "repeat", "RGB"); myClip.moveTo (0, 0); myClip.lineTo (w, 0); myClip.lineTo (2000, 900); myClip.lineTo (0, 900); myClip.lineTo (0, 0); myClip.endFill (); var myBMP:BitmapData = new BitmapData (myClip._width, myClip._height, false); myBMP.draw (myClip, new Matrix (), null, "normal", null, false); trace (myBMP.getPixel (w / 4, 0)); trace (myBMP.getPixel (w / 2, 0)); trace (myBMP.getPixel (w * 3 / 4, 0)); Последний раз редактировалось iNils; 25.06.2008 в 17:53. |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
iNils! Действительно в скринах хелпа видно, что RGB линейный, а linearRGB нелинейный. Но фактически linear означает линейный, а в данном случае он не линейный, а скорее квадратичный.
И потом зачем нужно было разработчикам Флеша разделять так называемую линейность градиента на визуальную и та что "в цифрах". Не лучше ли было сделать две константы определяющую вид градиента - первая linearRGB - линейный как "в цифрах" так и визуально, вторая - quadraticRGB, который как в цифрах, так и визульно выглядит как квадратичный.
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
Ууупс! iNils! Подскажи где про эту историю почитать (желательно на русском) - благодарен буду.
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
Часовой пояс GMT +4, время: 17:31. |
|
« Предыдущая тема | Следующая тема » |
|
|