Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Метод beginGradientFill(). Баг или что то еще... (http://www.flasher.ru/forum/showthread.php?t=113310)

Alex_beginner 24.06.2008 19:44

Метод beginGradientFill(). Баг или что то еще...
 
Здравствуйте уважаемые Форумчане!

У меня есть простой вопрос ответ на который никак не укладывается у меня в голове (наверно я тупой). Однако, мне очень желательно разобраться в этом вопросе. Вот, собственно, сам вопрос:

"Известный метод класса MovieClip - beginGradientFill() принимает ряд параметров, два из которых это fillType и interpolationMethod. Так вот передав в метод в качестве fillType строковое значение linear, а в качестве значения interpolationMethod - linearRGB и задав в качестве параметра matrix - матрицу индентичности (по главной диагонали 1) вдруг выясняется, что середина "гигантского градиента" (от -819.2 до 819.2) т.е. в нулевой позиции значение цвета градиента вовсе не 128 (для одноцветного градиента - например, красного)". Если же я выставляю значение interpolationMethod в RGB - градиент становиться вдруг линейным.

Что это баг или закономерное поведение метода?!!!

iNils 25.06.2008 00:03

Хочу код!:)

Alex_beginner 25.06.2008 10:43

Вложений: 1
Здравствуй iNils!
Выкладываю тестовый код.

Обрати внимание на следующее:

1. Клик на крайнем левом пикселе дает значение цвета 0x000000;
2. Клик на крайнем правом пикселе дает значение цвета 0xFF0000;
3. Клик на центральном пикселе дает значение цвета 0xBB0000 (R=0xBB=187), что не соответствует среднему значению цвета между 0 и 255 - 128. Это, собственно, и непонятно, поскольку в параметре interpolationMethod выставлено значение linearRGB.

Заранее благодарен!

iNils 25.06.2008 17:09

Линейный градиент в цифрах как раз дает 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));


Alex_beginner 25.06.2008 17:51

iNils! Действительно в скринах хелпа видно, что RGB линейный, а linearRGB нелинейный. Но фактически linear означает линейный, а в данном случае он не линейный, а скорее квадратичный.:)
И потом зачем нужно было разработчикам Флеша разделять так называемую линейность градиента на визуальную и та что "в цифрах". Не лучше ли было сделать две константы определяющую вид градиента - первая linearRGB - линейный как "в цифрах" так и визуально, вторая - quadraticRGB, который как в цифрах, так и визульно выглядит как квадратичный.

iNils 25.06.2008 17:56

Разработчика флеша тут не причем. Это уже исторически сложилось.

Alex_beginner 25.06.2008 18:09

Ууупс! iNils! Подскажи где про эту историю почитать (желательно на русском) - благодарен буду.


Часовой пояс GMT +4, время: 18:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.