Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.06.2009, 00:07
Offi вне форума Посмотреть профиль Отправить личное сообщение для Offi Найти все сообщения от Offi
  № 1  
Ответить с цитированием
Offi
 
Аватар для Offi

Регистрация: Sep 2008
Сообщений: 52
Question Результат floodFill в другой клип

Доброго времени суток всем!

Столкнулся с задачей: в битмапе необходимо сделать заливку области ограниченой другим цветом. Тоесть как в пеинте ведро. Для этого использую такой код:
Код AS1/AS2:
import flash.display.BitmapData;
 
var myBitmapData:BitmapData = BitmapData.loadBitmap("btm2"); 
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap(myBitmapData, this.getNextHighestDepth());
 
mc.onPress = function() {
	myBitmapData.floodFill(_xmouse, _ymouse, 0x000000FF);
}
Все удовлетворительно работает, только нужно заливку реализовать в отдельном клипе, дабы к примеру потом работать с прозрачностью заливки либо еще что-то.
Подскажите, пожалуйста, возможно ли как-то реализовать подобное?
Очень важно чтоб залитая область в итоге оказалась именно в новом клипе, а в битмапе все осталось без изменений.
Если что-то непонятно - уточню.

Старый 05.06.2009, 15:28
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Это сложно и медленно.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 05.06.2009, 16:02
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 3  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Ну создайте клип и в нем методами drawing API рисуйте. Или битмап дату поместите туда.

Старый 10.06.2009, 18:34
Offi вне форума Посмотреть профиль Отправить личное сообщение для Offi Найти все сообщения от Offi
  № 4  
Ответить с цитированием
Offi
 
Аватар для Offi

Регистрация: Sep 2008
Сообщений: 52
dimarik
"Сложно и медленно" - это как я понимаю если делать через getPixel(), setPixel() в цикле волнового алгоритма...?
Я очень наделялся, что возможно будет это сделать через стандартную функцию Не представляете как я был рад, когда понял, что для заливки не придется писать вышеназванный алгоритм обнаружив функцию floodFill, а получается что результат работы floodFill в другое место я не перенаправлю...

Волгоградец
"методами drawing API" - это moveTo(),lineTo()? думаю это никак мне не поможет

Старый 10.06.2009, 18:49
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 5  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
А нельзя ли сохранить битмапу до заливки, потом сделать заливку, а потом сравнить новый битмап со старым и получить область заливки? Потом её перенести.

Старый 10.06.2009, 18:52
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 6  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Да, методами moveTo(), lineTo(), beginFill(), endFill().
Если не предполагается передвигать заливку, а только менять цвет - можно методом threshold() попробовать - но так затронутся другие области с таким же цветом как заливка.

Старый 10.06.2009, 19:48
Offi вне форума Посмотреть профиль Отправить личное сообщение для Offi Найти все сообщения от Offi
  № 7  
Ответить с цитированием
Offi
 
Аватар для Offi

Регистрация: Sep 2008
Сообщений: 52
Stargazer
Я тоже об этом думал, но не знаю возможно ли это стандартными средствами.

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

Волгоградец
threshold() из-за затрагивания других областей непокатит, да и передвигать заливку нужно будет...
а как с помощю moveTo(), lineTo() мне из исходного битмапа сделать заливку неправильной фигуры ограниченой другим цветом?

Старый 10.06.2009, 20:18
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 8  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
Цитата:
Если не возможно, то сравнительно быстрей будет работать самописный floodFill отсылающий результаты в другой клип нежели самописная проверка идентичности старого и нового битмапов.
Может, какой-нибудь overlay с вычитанием положить?

Старый 10.06.2009, 21:04
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
можно threshold'ом
только он не только то, что floodFill нашел пропустит, но и все пиксели с 0x000000FF, что может быть и не критично, если красить каким-нить экзотичным цветом

Код AS1/AS2:
myBitmapData.floodFill(mc._xmouse, mc._ymouse, 0x000000FF);
var maskBmd:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height, true, 0xFF000000);
 
maskBmd.threshold(myBitmapData, maskBmd.rectangle, new Point(), "!=", 0x000000FF, 0x0, 0x00FFFFFF, false);

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
bitmapdata , floodFill

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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