Форум 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)
-   -   как сделать инструмент заливка (http://www.flasher.ru/forum/showthread.php?t=81462)

Morozov1982 20.06.2006 09:29

как сделать инструмент заливка
 
Сейчас работаю над созданием небольшого графического редактора во флэше и встал перед одной небольной проблемой.

Создал разные инструменты: карандаш, разные фигуры и т.п., НО НЕ МОГУ СОЗДАТЬ ИНСТРУМЕНТ ЗАЛИВКА, как во всех нормальных графических редакторах.

Если кто умеет, или есть исходник, большая просьба, МАЯКНИТЕ :)

Король 20.06.2006 09:33

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

Morozov1982 20.06.2006 09:35

Я приблизительно так и думал, но думал, что есть способы попроще.

Король 20.06.2006 10:03

Цитата:

Сообщение от Morozov1982
Я приблизительно так и думал, но думал, что есть способы попроще.

придумай - и будет

iNils 20.06.2006 11:53

А вы векторный редактор делаете или растровый?

Morozov1982 20.06.2006 12:12

Я делаю векторный редактор

iNils 20.06.2006 12:16

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

Morozov1982 20.06.2006 12:19

Ну в принципе да, это наиболее оптимальный вариант...

Король 20.06.2006 12:21

Цитата:

Сообщение от iNils
Тогда вам стоит продумать другую схему реализации заливки. То есть хранить каждый объект отдельно и перерисовывать его.

а я что предложил?

iNils 20.06.2006 12:25

Вложений: 1
Тем не менее вот пример работы заливки (ему правда уже 2 года, да и код там не ахти)

Morozov1982 20.06.2006 12:27

Спасибо iNils в который раз уже выручаешь, надеюсь и я когда-нибудь смогу тебе помочь. :)

iNils 20.06.2006 12:27

А вот еще теория
http://algolist.manual.ru/graphics/fill.php

PS. Забросил я идею с заливкой из-за малой скорости выполнения.

Morozov1982 20.06.2006 12:36

Теория - это вообще тема, это самое приятное, что я могу получить (не считая исходников конечно :) )

SvTol 04.02.2008 09:41

Цитата:

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

массив точек... жестко.
у меня другая идея появилась но как реализовать пока не знаю.
Вобщем примерно так:
1. делаем битмап из картинки
2. Определяем область заливки (берем точку смотрим её цвети смотрим смежные пикселы на предмет совпадения цвета)
3. В другом битмапе рисуем то че нада залить
4. Аттачим к исходному рисунку нарисованные битмап

Ну вобщем как то так... Только пока смутно представляю как смежные пикселы проверять...

flash33 04.02.2008 11:43

Ищите в гугле, особенно в исходниках Delphi и С, что вы всё велосипед изобретате???

SvTol 04.02.2008 20:27

Цитата:

Сообщение от flash33
исходниках Delphi и С

особенно если не видел ни того ни другого никогда

Я сделал вот так :
Код:

// делаем из нарисованого битмап
var holst:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height);
holst.draw(avatar_mc,null,null,null,avatar_mc.oblast);
// заливаем то что надо
holst.floodFill(m_x, m_y, 0x00FF0000);
// делаем ещё один битмап из нарисованного
var ishodnik:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height);
ishodnik.draw(avatar_mc,null,null,null,avatar_mc.oblast);
//сравниваем битмапы                       
var diffBmpData:BitmapData = holst.compare(ishodnik) as BitmapData;
// а терь заливаем ещё раз
diffBmpData.floodFill(m_x, m_y, pipetka.selectedColor);
//ну а теперь аттачим все это к нарисвоаному
var bm:Bitmap = new Bitmap(diffBmpData);
bm.x=0;
bm.y = 0;
avatar_mc.addChild(bm);

не пашет. почему пока не понял. не работает заливка битмапа...

SvTol 04.02.2008 20:29

заработало!!!!
косяк был в
Код:

var holst:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height, false);

SvTol 04.02.2008 20:59

вот работающий код:
Код:

var holst:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height,false);
                                holst.draw(avatar_mc,null,null,null,avatar_mc.oblast);
                                holst.floodFill(m_x, m_y, 0x00FF0000);
                               
                    var ishodnik:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height,false);
                                ishodnik.draw(avatar_mc,null,null,null,avatar_mc.oblast);
                               
                                var diffBmpData:BitmapData = holst.compare(ishodnik) as BitmapData;                               
                                var resultat:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height,true);
                                resultat.draw(diffBmpData,null,null,null,avatar_mc.oblast);
                               
resultat.floodFill(m_x, m_y, 0xFFFF0000);
resultat.floodFill(1, 1, 0x00FFFFFF);
                       
                               
var bm:Bitmap = new Bitmap(resultat);
bm.x=0;
bm.y = 0;
avatar_mc.addChild(bm);

трабылы:
компонент выбора цвета отдает цвет в виде числа какого то как его конвертнуть в ARGB пока не догнал
Сглаживание делает пиксели рядом с линией другого цвет поэтому по контуру заливки белая полоска...
толи как то сглаживание отрубить нада то ли заливку больше сделать...


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

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