Проблема градиента в ActionScript - PullRequest
0 голосов
/ 20 мая 2010

У меня странная проблема с полосами между цветами градиента.

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

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

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

альтернативный текст http://www.freeimagehosting.net/uploads/7e3382befe.jpg

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Изменить: Из-за ошибки точности может появиться артефакт, поскольку у вас есть только 255 значений для распространения.

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

//...

//Assign bitmapData to the leftToRightLine
var leftToRightLineBitmapData:BitmapData = 
                   new BitmapData(leftToRightLine.width,leftToRightLine.height);
leftToRightLineBitmapData.draw(leftToRightLine);

// add some blur filter to the color band
leftToRightLine.filters=[new BlurFilter(2,0, 3)];

// copy the color band on the bitmap but but starting at 1 pixel right to avoid
// the blur on the start
leftToRightLineBitmapData.draw(leftToRightLine, new Matrix(1,0,0,1, 1));

for(var i:int = 1; i < (DEFAULT_BANDING_QUALITY + 1); i++)
{
  //...

Без полного кода для проверки трудно понять, нацелен ли я в правильном направлении;)

  • В преобразовании радиана есть ошибка: i*Math.pi/180, а не / 1800 , поэтому теперь вы можете перейти к 360, а не 3600
  • почему начинать с 1, а не с 0?

  • попробуйте поиграть с толщиной линии и используйте линию GradientStyle

  • Вы ссылаетесь на objMatrix, но создаете circleMatrix

0 голосов
/ 20 мая 2010

Я думаю, что полоса вызвана вашими отношениями.

Попробуйте это:

graphics.beginGradientFill(GradientType.LINEAR, [nColor, nColor], [1, 1], [0, 255], objMatrix)

Кроме того, должен ли objMatrix быть на самом деле circleMatrix?

Вы можете увидеть разницу между [127, 255] и [0, 255] в LiveDoc's

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...