2013-09-30 61 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

感謝它的工作,但它們彼此水平向下,我怎樣才能使它們垂直?我喜歡總高度積累的想法:)。最終的圖像應該是寬度和高度兩個冪,所以我將最終的高度和寬度修改爲兩個冪。在將它們繪製到較大的紋理之前,如何旋轉90degree的位圖? – Andre

+0

你需要更好地瞭解矩陣如何改變位置。看看matrix.rotate()。另一種方法是創建一個常規的顯示器Sprite,addChild像你一樣多的圖像,旋轉和放置圖像並繪製精靈而不是圖像。 – mika

+0

哦,你看看http://www.codeandweb.com/texturepacker? – mika

1

總體思路是將較小的圖像複製到較大的圖像,從頂部開始向右移動,當頂部行已滿時向下移動到下一行。

因此,假設你有要填補BigImage,而且你希望把它SmallImages數組,該算法看起來像:

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 

這是基本的想法。你必須用你使用的任何編程語言充實代碼。

+0

我希望他們是一個一個,像一卷圖片。 – Andre

+0

Downvoter?習慣上提供一些反饋。這個答案有什麼特別的嗎? –

+0

其實我沒有投票。它不是我 – Andre