![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
Здравствуйте, имеется растровая карта 4к*4к, стоит задача разделить ее на города(для дальнейшего выделения и работы с ними) Для оптимизации размера решил импортировать в флеху одну jpg. и уже там обвести векторным контуром города. Проблема возникла при программном разделении растровой карты, Алгоритм пробегает по всем векторным маскам городов, отрисовывает их в bitmapData, и уже потом заполняет их беком фона.
bmpCity:BitmapData = new BitmapData(borders['_' + i].width, borders['_' + i].height, true, 0x000000); bmpCity.draw(borders['_' + i]); for (var _x:int = 0; _x < bmpCity.width;_x++) for (var _y:int = 0; _y < bmpCity.height; _y++) if (bmpCity.getPixel32(_x, _y) >> 24 & 0xFF) bmpCity.setPixel32(_x, _y, bitMap.getPixel32(finMap['_' + i].x + _x, finMap['_' + i].y + _y)); ![]() |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
blendMode ситуацию не улучшил.экспериментально выяснил что тормозит именно setPixel. если его отключить - ускорится раза в 3. Едисвтенный вар как я понял, все таки нарезать битмапу в ide, но можно ли это как то сделать через существующие маски? либо все равно прийдется нарезать на png в фотошопе?
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
Цитата:
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
nubideus,Не понял про маску с режимом наложения без копирования икселей, можешь подробнее чем тут поможет бленд?
samanaНу, этих городов больше 100. под каждый подгонять маску напряжно, да и если не растризировать, то опять же в каждом городе будет хранится вся карта целиком. |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
faraday,
package { import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.GradientType; import flash.display.Shape; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); var mask:Shape = new Shape(); var gradientMatrix:Matrix = new Matrix(); gradientMatrix.createGradientBox(100, 100); mask.graphics.beginGradientFill(GradientType.LINEAR, [0xFFFFFF, 0xFFFFF], [0x00, 0xFF], [0, 255], gradientMatrix); mask.graphics.drawCircle(50, 50, 40); mask.graphics.drawRect(70, 70, 30, 30); // векторная маска var background:BitmapData = new BitmapData(800, 600, true, 0); // твоя карта background.noise(0); var maskRect:Rectangle = mask.getBounds(null); var region:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // результат var maskBitmap:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // растеризованная маска maskBitmap.draw(mask, new Matrix(1, 0, 0, 1, -maskRect.x, -maskRect.y)); region.copyPixels(background, maskRect, new Point(), maskBitmap, new Point()); // copyPixels умеет маску this.addChild(new Bitmap(region)).transform.matrix = new Matrix(1, 0, 0, 1, maskRect.x, maskRect.y); } } } и что бы не множить растр делаешь var maskRect:Rectangle = mask.getBounds(null); var region:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // результат region.draw(mask, new Matrix(1, 0, 0, 1, -maskRect.x, -maskRect.y)); region.copyPixels(background, maskRect, new Point(), region, new Point()); // copyPixels умеет маску Цитата:
faraday, хорошим тоном было бы приложить сюда карту и маски в виде swc Последний раз редактировалось nubideus; 12.07.2014 в 19:18. |
|
|||||
|
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Цитата:
Ну и второй способ доставать, как child. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
nubideus, спасибо, copyPixels работает и правда куда быстрее. Остался только непонятным момент с использвоанием матричных преобразований? зачем они тут нужны, разницы без них не заметил..
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|