Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.flame.display
- {
- import com.flame.system.Base;
- import flash.display.BitmapData;
- import flash.geom.Point;
- import flash.geom.Rectangle;
- public class Spritemap extends Base
- {
- private var __mBitmaps:Array;
- private var __mBlockWidth:int;
- private var __mBlockHeight:int;
- public function Spritemap(bitmapData:BitmapData, backgroundColor:uint=0xFFFF00FF, borderColor:uint=0xFFFFFFFF):void
- {
- __mBitmaps = new Array;
- __mBlockWidth = __doCalculateWidth(bitmapData, borderColor);
- __mBlockHeight = __doCalculateHeight(bitmapData, borderColor);
- __doProcessBitmaps(bitmapData, backgroundColor);
- }
- private function __doCalculateHeight(bitmapData:BitmapData, borderColor:uint):int
- {
- var result:int = 0;
- var maxHeight:int = bitmapData.height;
- while (result != maxHeight)
- {
- if (bitmapData.getPixel32(0, ++result) == borderColor) {
- break;
- }
- }
- return result;
- }
- private function __doCalculateWidth(bitmapData:BitmapData, borderColor:uint):int
- {
- var result:int = 0;
- var maxWidth:int = bitmapData.width;
- while (result != maxWidth)
- {
- if (bitmapData.getPixel32(++result, 0) == borderColor) {
- break;
- }
- }
- return result;
- }
- private function __doProcessBitmaps(bitmapData:BitmapData, backgroundColor:uint):void
- {
- var maxFramesX:int = (bitmapData.width / __mBlockWidth);
- var maxFramesY:int = (bitmapData.height / __mBlockHeight);
- var block:BitmapData = new BitmapData(__mBlockWidth, __mBlockHeight);
- var point:Point = new Point;
- var rectBuffer:Rectangle = new Rectangle(0, 0, __mBlockWidth, __mBlockHeight);
- for (var i:int = 0; i < maxFramesY; i++)
- {
- __mBitmaps.push(new Array);
- for (var j:int = 0; j < maxFramesX; j++)
- {
- rectBuffer.x = (__mBlockWidth * j) + (j > 0 ? j : 0);
- block.copyPixels(bitmapData, rectBuffer, point);
- var rect:Rectangle = block.getColorBoundsRect(backgroundColor, backgroundColor, false);
- if (rect.width && rect.height)
- {
- var data:BitmapData = new BitmapData(rect.width, rect.height);
- data.copyPixels(block, rect, point);
- data.threshold(data, data.rect, point, "==", backgroundColor);
- __mBitmaps[i].push(data);
- } else {
- break;
- }
- }
- rectBuffer.y += (__mBlockHeight + 1);
- }
- }
- //
- // GET AND SET
- //
- public function getBitmapDataAt(row:uint, column:uint):BitmapData
- {
- return __mBitmaps[row][column];
- }
- public function getRow(row:uint):Array
- {
- return __mBitmaps[row];
- }
- }
- }
Add Comment
Please, Sign In to add comment