2011-08-09 4 views
1

로더 객체의 비트 맵 데이터를 가지고 있으며이를 타일로 사용하기 위해 32x32 사각형으로 분할하고 싶습니다. 그렇게하는 가장 효율적인 방법은 무엇입니까?Actionscript 3 : 비트 맵을 타일로 분할

+0

그것을 할 수있는 가장 좋은 방법은 *하지 * 타일로 분할하는 것이 아니라 (답변에서 언급 한 바와 같이 CopyPixels 사용) 대상 캔버스에 원본 소스 질감에서 직접 타일 블럭 전송. –

답변

1

BitmapData 기능 copyPixels을 사용할 수 있습니다 (link 참조). 소스 BitmapData의 한 영역 (Rectangle로 지정된 영역)의 픽셀을 BitmapData의 특정 Point으로 복사 할 수 있습니다. 기본적으로 각 32x32 사각형에 대해 새 BitmapData을 만들고로드 된 객체를 반복하여 copyPixels으로 사각형을 채울 수 있습니다.

5

나는 당신을 위해 일해 왔습니다. 기본 개념은 BitmapData 함수 copyPixels를 사용하는 것입니다. 동일한 내용은 Adobe 참조를 참조하십시오. 소스 BitmapData의 한 영역 (사각형으로 지정됨)의 픽셀을 대상 BitmapData의 특정 Point로 복사 할 수 있습니다. 각 32x32 사각형에 대해 새 BitmapData를 만들고로드 된 객체를 반복하여 copyPixels로 사각형을 채 웁니다.

var imageLoader:Loader; 

function loadImage(url:String):void 
{ 
    // Set properties on my Loader object 
    imageLoader = new Loader(); 
    imageLoader.load(new URLRequest(url)); 
    imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imageLoading); 
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
} 
loadImage("Cow Boy.jpg");//--------->Replace this by your image. I hope you know to specify path. 
function imageLoaded(e:Event):void 
{ 
    // Load Image 
    imageArea.addChild(imageLoader); 

    var mainImage:BitmapData = new BitmapData(imageArea.width,imageArea.height); 
    var tileX:Number = 36; 
    var tileY:Number = 36; 
    var bitmapArray:Array; 

    var tilesH:uint = Math.ceil(mainImage.width/tileX); // Number of Columns 
    var tilesV:uint = Math.ceil(mainImage.height/tileY);// Number of Rows 

    mainImage.draw(imageArea); 
    imageArea.x += 500; 

    bitmapArray = new Array(); 

    for (var i:Number = 0; i < tilesH; i++) 
    { 
     bitmapArray[i] = new Array(); 
     for (var n:Number = 0; n < tilesV; n++) 
     { 
      var tempData:BitmapData=new BitmapData(tileX,tileY); 
      var tempRect = new Rectangle((tileX * i),(tileY * n),tileX,tileY); 
      tempData.copyPixels(mainImage,tempRect,new Point(0,0)); 
      bitmapArray[i][n]=tempData; 
     } 
    } 

    for (var j:uint =0; j<bitmapArray.length; j++) 
    { 

     for (var k:uint=0; k<bitmapArray[j].length; k++) 
     { 

      var bitmap:Bitmap=new Bitmap(bitmapArray[j][k]); 
      this.addChild(bitmap); 
      bitmap.x = (j+1)* bitmap.width + j*10; 
      bitmap.y = (k+1)* bitmap.height + k*10; 

     } 
    } 



} 
function imageLoading(e:ProgressEvent):void 
{ 
    // Use it to get current download progress 
    // Hint: You could tie the values to a preloader :) 
} 
관련 문제