Просмотр полной версии : как сделать инструмент заливка
Morozov1982
20.06.2006, 09:29
Сейчас работаю над созданием небольшого графического редактора во флэше и встал перед одной небольной проблемой.
Создал разные инструменты: карандаш, разные фигуры и т.п., НО НЕ МОГУ СОЗДАТЬ ИНСТРУМЕНТ ЗАЛИВКА, как во всех нормальных графических редакторах.
Если кто умеет, или есть исходник, большая просьба, МАЯКНИТЕ :)
исходника нет. могу подсказать - все твои фигуры и линии копируй в специальный объект - каждую как массив точек - и по клике ведром определяй, какую из них ты редактируешь - и перерисовывай ее нужным цветом
Morozov1982
20.06.2006, 09:35
Я приблизительно так и думал, но думал, что есть способы попроще.
Я приблизительно так и думал, но думал, что есть способы попроще.
придумай - и будет
А вы векторный редактор делаете или растровый?
Morozov1982
20.06.2006, 12:12
Я делаю векторный редактор
Тогда вам стоит продумать другую схему реализации заливки. То есть хранить каждый объект отдельно и перерисовывать его.
Morozov1982
20.06.2006, 12:19
Ну в принципе да, это наиболее оптимальный вариант...
Тогда вам стоит продумать другую схему реализации заливки. То есть хранить каждый объект отдельно и перерисовывать его.
а я что предложил?
Тем не менее вот пример работы заливки (ему правда уже 2 года, да и код там не ахти)
Morozov1982
20.06.2006, 12:27
Спасибо iNils в который раз уже выручаешь, надеюсь и я когда-нибудь смогу тебе помочь. :)
А вот еще теория
http://algolist.manual.ru/graphics/fill.php
PS. Забросил я идею с заливкой из-за малой скорости выполнения.
Morozov1982
20.06.2006, 12:36
Теория - это вообще тема, это самое приятное, что я могу получить (не считая исходников конечно :) )
исходника нет. могу подсказать - все твои фигуры и линии копируй в специальный объект - каждую как массив точек - и по клике ведром определяй, какую из них ты редактируешь - и перерисовывай ее нужным цветом
массив точек... жестко.
у меня другая идея появилась но как реализовать пока не знаю.
Вобщем примерно так:
1. делаем битмап из картинки
2. Определяем область заливки (берем точку смотрим её цвети смотрим смежные пикселы на предмет совпадения цвета)
3. В другом битмапе рисуем то че нада залить
4. Аттачим к исходному рисунку нарисованные битмап
Ну вобщем как то так... Только пока смутно представляю как смежные пикселы проверять...
Ищите в гугле, особенно в исходниках Delphi и С, что вы всё велосипед изобретате???
исходниках 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);
не пашет. почему пока не понял. не работает заливка битмапа...
заработало!!!!
косяк был в
var holst:BitmapData = new BitmapData(avatar_mc.oblast.width,avatar_mc.oblast.height, false);
вот работающий код:
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 пока не догнал
Сглаживание делает пиксели рядом с линией другого цвет поэтому по контуру заливки белая полоска...
толи как то сглаживание отрубить нада то ли заливку больше сделать...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.