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 无法获得它,它会提供一个伪代码。

4

2 回答 2

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);
}

我无法测试它,但它应该可以工作,或者至少让你朝着正确的方向前进。让我知道!

于 2013-09-30T19:43:48.237 回答
1

总体思路是将较小的图像复制到较大的图像中,从顶部开始向右移动,当顶行已满时向下移动到下一行。

因此,假设您有一个要填充的 BigImage 和一个要放入其中的 SmallImage 数组,该算法如下所示:

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

这是基本的想法。你必须用你使用的任何编程语言来充实代码。

于 2013-09-30T15:19:23.040 回答