2013-09-30 5 views
0

각각 일련의 그림이 128 * 128입니다. 그들이 그렇게 그려 있도록 사진의 수는 나는 한 장의 사진에 그룹 그들에게 36 싶습니다됩니다하나의 텍스처로 여러 비트 맵 그리기

public static const SIZE : int 1024; 
public var img1 : Bitmap; 
public var img2 : Bitmap; 

var bmp:BitmapData=new BitmapData(SIZE,SIZE,false,0); 

//Draw img1 at 0,0 
bmp.draw(img1); 

//Draw img2 at 512,0 
bmp.draw(img2, new Matrix(1,0,0,1, SIZE/2, 0)); 

//Draw img1 at 512,512 
bmp.draw(img1, new Matrix(1,0,0,1, SIZE/2, SIZE/2)); 

//Draw img1 at 0,512 
bmp.draw(img2, new Matrix(1,0,0,1, 0, SIZE/2)); 

내 문제는 내가 상관없이 이미지를 배치하는 알고리즘을 마련하고자하는 것입니다 숫자, 그래서 정적 코드에 의해 이미지를 만들지 마 .. 가짜 코드는 AS3을 사용하여 얻을 수 없다면 도움이됩니다.

답변

2
var images:Vector.<Bitmap> = new Vector.<Bitmap>(); 
images[0] = bmp1; 
images[1] = bmp2; 
// etc... 

var i:int = 0; 
var l:int = images.length; 
var maxWidth :int = 0; 
var totalHeight:int = 0; 
var matrix:Matrix = new Matrix(); 
var render:Bitmap; // your final render 


// find how tall will be the picture: 
for (i = 0; i < l; i++) { 
    maxWidth = Math.max(maxWidth , images[i].width); // find the widest image 
    totalHeight += images[i].height; // find the total height of your image 
} 

// create the render container based on the data we just found out: 
render = new Bitmap(new BitmapData(maxWidth , totalHeight, true, 0xff00ff)); 

// draw! 
for (i = 0; i < l; i++) { 
    render.bitmapData.daw(images[i], mat); 
    matrix.translate(0, images[i].height); 
} 

테스트 할 수는 없지만 작동해야하며, 적어도 올바른 방향으로 가야합니다. 알려줘!

+0

덕분에 효과가 있었지만, 그들은 서로 수평 적으로 아래로 내려갔습니다. 어떻게 수직으로 만들 수 있습니까? 나는 총 높이 축적에 대한 생각을 좋아했다. :) 최종 이미지의 너비와 높이가 2의 거듭 제곱이어야하므로 최종 높이와 너비를 2의 거듭 제곱으로 수정했습니다. 비트 맵을 큰 텍스처로 그리기 전에 비트 맵을 90도 회전시키는 방법은 무엇입니까? – Andre

+0

행렬이 위치를 변경하는 방법을 더 잘 이해하려면 주위를 어지럽히 야합니다. matrix.rotate()를 살펴보십시오. 또 다른 방법은 일반 표시 Sprite, addChild를 가지고있는만큼 많은 이미지를 만들고 회전하고 배치하고 이미지 대신 스프라이트를 그릴 수 있습니다. – mika

+0

아, http://www.codeandweb.com/texturepacker를 살펴 보았습니까? – mika

1

일반적으로 작은 이미지를 큰 이미지로 복사하고 위쪽에서 시작하여 오른쪽으로 이동 한 다음 맨 위 행이 가득 차면 다음 행으로 이동합니다. 기본적인 아이디어

xpos = 0 
ypos = 0 
for i = 0 to number_of_small_images-1 
    draw SmallImages[i] on BigImage at position (xpos, ypos) 
    xpos += small_image_width 
    if (xpos >= big_image_width) 
     xpos = 0 
     ypos = ypos + small_image_height 

:

그래서, 당신은 당신이 입력하고자하는 BigImage, 당신이 그것을 넣어하려는 SmallImages의 배열을 가지고 가정, 알고리즘은 같이 보입니다. 사용중인 프로그래밍 언어에 상관없이 코드를 작성해야합니다.

+0

저는 사진들을 릴처럼 하나씩 내려주고 싶습니다. – Andre

+0

Downvoter? 피드백을 제공하는 것이 일반적입니다. 특히이 답변에 잘못된 점이 있습니까? –

+0

나는 실제로 투표를하지 않았다. 그게 아니야 – Andre