Форум 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=147442)

Parez 04.12.2010 17:33

Задание цвета пикселам находящимся внутри круга
 
Здравствуйте.
Хочу сделать инструмент "кисть", которая рисует именно кругами (как базовые кисти в фотошопе) определённого радиуса. По окружности изменять пикселы получается без проблем. Но требуется также заполнить внутреннюю область круга.
Как это можно сделать без сильных затрат?

udaaff 04.12.2010 19:43

Я так понял, вы программно пытаетесь закрашивать определенные пиксели.
Нарисуйте круг и отрисуйте его в ваш битмап.

Reon 04.12.2010 23:25

Кусочек кода покажите что ли, совсем ничего непонятно...

expl 05.12.2010 01:44

Рисование отображаемого объекта в битмапу же есть, там можете хоть круг - хоть звездочку нарисовать.
про это же речь?
Код AS3:

var shape:Shape = new Shape();
....
var g:Graphics = shape.graphics;
g.beginFill(0x0000ff);
g.drawCircle(0, 0, 10);
g.endFill();
....
bitmapData = new BitmapData(640, 480);
....
bitmapData.draw(shape, new Matrix(1, 0, 0, 1, mouseX, mouseY));


Parez 05.12.2010 12:49

Да да да. Это. Я тоже об этом думал, но не был уверен. спасибо.

Ещё сразу спрошу, чтобы новую тему не создавать:
Если быстро двигать мышку, линия прорисовывается отдельными кругами (постоянно прерывается). Отрисовывание происходит по событию MOUSE_MOVE. Соответственно чем меньше кисть, тем больше эти разрывы заметны. То есть проблема именно в отлавливании события. Видимо оно реагирует недостаточно часто. Пробовал так же делать через ENTER_FRAME с фреймрейтом 120, лучше не стало.
В чём может быть проблема? Возможно стоит рисовать так же в промежуточных координатах, которые не были отловлены при перемещении мыши? Или всё-таки есть более оптимальное решение?

Партизан 05.12.2010 13:04

видел простой класс под вашу задачу... BitmapDataEx кажется называется.

Parez 05.12.2010 16:28

Вложений: 1
Что это конкретно за класс? Как он работает и что вообще делает?
Вот что имеется на данный момент:

medvedya2 05.12.2010 17:49

В самой ОС регистрация мышки с прерываниями.
Можно нарисовать четырех угольник от предыдущего положения мышки до текущего, чтобы как-бы линия была от круга до круга - это если просто кисточка из круга.

Или можно по по циклу из кругов нарисовать линию, даже с формулами мороки не будет.
Код AS3:

//должно заработать, правда может зависнуть :)
//не проверял
угол=Math.atan2(круг.y-mouseY , круг.x-mouseX);
while(int(mouseX)!=int(круг.x) && int(mouseY)!=int(круг.y))
{
  круг.x=круг.x - Math.cos(угол);
  круг.y=круг.x - Math.sin(угол)
 
}
круг.x=int(mouseX);
круг.y=int(mouseY);


Contemplator 05.12.2010 17:56

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

expl 05.12.2010 18:36

Цитата:

глупость, конечно, возможно сморожу.
По крайней мере нагужать машину будет меньше раз эдак в 100.
Всем известный Paint при рисовании карандашом НЕ опрашивает мышь со скоростью 9000 раз в секунду (это технически невозомжно/не поможет), а рисует линии между последней и новой точкой

Если углы у широких линий не достаточно "круглые" - придется применить немного математики и рисовать последнее приращение замкнутым контуром с заливкой


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

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