Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отрисовка распрашенного графика (http://www.flasher.ru/forum/showthread.php?t=206813)

WERt 05.03.2014 22:43

Отрисовка распрашенного графика
 
Всем привет! Я столкнулся с такой задачей, рисую маршрут в виде однопиксельной линии во флеше, определенного цвета. Хочу потом по этим линиям выдирать точки и восстановить кривую через код. Вытаскиваю все точки,предварительно перегнав в BitmapData. Не могу нормально по порядку считать эти точки,мой глупый мозг не хочет придумывать нормальный алгоритм. Суть примерно такая: начальная точка- допустим черная, ее я нахожу через getPixel. И от нее начинаю идти во все возможные стороны и искать следующий пиксель зеленого цвета. В общем, не получается у меня вытащить правильно точки в верной последовательности) Может кто-нибудь подкинуть идейку, не могу далее сообразить.

samana 05.03.2014 22:57

А зачем вам отрисовывать это в растр? Если вы рисуете линию, то запомните точки, по которым вы её нарисовали и используйте их для последующего редактирования. Если я правильно понял вашу задачу.
---------------------------
А, вы вручную во FlashIDE рисуете линию и хотите потом научиться изменять её с помощью кода, я понял.
---------------------------
Возможно вам поможет readGraphicsData()

WERt 05.03.2014 23:15

спасибо за ответ. Мне не то чтоб нарисовать это надо было, надо просто вытащить точки в правильном порядке и потом двигать по этому маршруту объекты

samana 06.03.2014 00:18

Но если вытащить точки из линии, то их получается намного больше, чем было при рисовании.
Этот код, покажет все точки из нарисованной вами линии.
Код AS3:

//line - ваш объект в котором нарисована линия
var v:Vector.<IGraphicsData> = line.graphics.readGraphicsData();
graphics.beginFill(0x0000CC);
for (var i:int = 0; i < v.length; i++)
{
        if (v[i] is GraphicsPath)
        {
                var gd:Vector.<Number>=(v[i] as GraphicsPath).data
 
                for (var j:int = 0; j < gd.length; j+=2)
                {
                        graphics.drawCircle(gd[j], gd[j + 1], 3);
                }
        }
}


WERt 06.03.2014 00:30

Цитата:

Сообщение от samana (Сообщение 1161187)
Но если вытащить точки из линии, то их получается намного больше, чем было при рисовании.
Этот код, покажет все точки из нарисованной вами линии.
Код AS3:

//line - ваш объект в котором нарисована линия
var v:Vector.<IGraphicsData> = line.graphics.readGraphicsData();
graphics.beginFill(0x0000CC);
for (var i:int = 0; i < v.length; i++)
{
        if (v[i] is GraphicsPath)
        {
                var gd:Vector.<Number>=(v[i] as GraphicsPath).data
 
                for (var j:int = 0; j < gd.length; j+=2)
                {
                        graphics.drawCircle(gd[j], gd[j + 1], 3);
                }
        }
}


Почему-то метод readGaphicsData у меня в сдк не существует)
Линия нарисована в битмапе.

samana 06.03.2014 01:12

Это был пример для векторного содержимого и с битмапой конечно не сработает.
Я не помню в какой версии внедрили readGaphicsData, но это было кажется не очень давно. У меня SDK 4.6, и флешплеер 11.9.

WERt 06.03.2014 02:51

все,задачу решил, спасибо:)

Добавлено через 2 минуты
моя теория была практически верна, только потребовалось откинуть лишь все пиксели, которые светлее чем изначальный цвет больше чем искомый цвет/k= в моем случае 1.4)


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

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