![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2010
Адрес: 52.726839, 41.448723
Сообщений: 6
|
Приветствую! Я во флэше новичок, но очень надо разобраться. Такой вопрос - как нормально реализовать программное разбиение картинки на кусочки по заданной сетке и потом чтобы их можно было собрать вместе? Я уже хорошенько погуглил и даже нашел немного материала. Вот, например, http://demiart.ru/forum/index.php?showtopic=52274. Но в том примере сам автор обозначает такой баг, что между кусочками из картинки вырезаются пиксели, где накладывается сетка. Я так понял это происходит потому что сетка рисуется и фотографируется в битмап, при этом получается растровой. Видел ещё примеры(правда ссылку уже не найду), где пазлы создаются рученьками в рабочей среде - сетка накладывается на изображение, потом вместе выделяются и жмется CTRL+B, потом каждый кусочек преобразуется в мувик, добавляется на сцену, и каждому кусочку вручную прописывается инстанс. Но это тоже определенно не подходит, потому что нужно именно брать картинку из файла пользователя, который он предложит и её уже резать. В моём же случае есть несколько уже готовых векторных сеток, сгенерированных в Corel`e, потом сохраненных в .sfw и импортированных в библиотеку. Вот как реализовать чтобы картинка разрезалась по этим векторным сеткам без потерь? и в принципе это возможно программным путём? может есть более удобные подходы?
Заранее благодарен за помощь!)))) |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Попробуйте такой способ. Проще ничего не придумал.
import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; // вырезка одного пазла. // исходное изображение var image:BitmapData = BitmapData.loadBitmap("image"); // карта пазлов, каждый из которых имеет уникальный цвет var map:BitmapData = BitmapData.loadBitmap("map"); // текущий цвет пазла в карте var currentPuzzleColor:Number = 0xFFFF6633; // определяем границы текущего цвета var puzzleBounds:Rectangle = map.getColorBoundsRect(0xFFFFFFFF, currentPuzzleColor, true); // создаем битмапдату по размерам цвета var croppedImage:BitmapData = new BitmapData(puzzleBounds.width, puzzleBounds.height, true, 0xFFFFFFFF); // копируем кусок исходного изображения в границах цвета croppedImage.copyPixels(image, puzzleBounds, new Point(0, 0)); // устанавливаем всем пикселям не равным текущему цвету — 0x00000000 croppedImage.threshold(map, puzzleBounds, new Point(0, 0), "!=", currentPuzzleColor, 0x00000000, 0xFFFFFFFF); var imageContainer:MovieClip = createEmptyMovieClip("imageContainer", 0); imageContainer.attachBitmap(croppedImage, 0); |
|
|||||
|
Регистрация: Feb 2010
Адрес: 52.726839, 41.448723
Сообщений: 6
|
а можно поподробней насчет синтаксиса методов getColorBoundsRect() и threshold()? какие параметры у них в скобках прописываются?
что-то я погуглил и ничего толком не нашёл по этому поводу. Последний раз редактировалось Bolshoy2010; 08.04.2010 в 12:54. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
http://help.adobe.com/ru_RU/AS2LCR/F...10.html#162329
http://help.adobe.com/ru_RU/AS2LCR/F...95.html#155842 |
|
|||||
|
Регистрация: Feb 2010
Адрес: 52.726839, 41.448723
Сообщений: 6
|
Огромное спасибо за помощь и информацию!! буду разбираться и пробовать.
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:13. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|