是否可以在不将其添加到显示列表的情况下调整SpriteAsset的大小?

时间:2010-03-31 06:59:45

标签: flex flash actionscript-3

我有一个嵌入式图像资源(带有scale9网格),我正在尝试在调整大小时获取bitmapdata,但如果不将它添加到显示列表中我似乎无法做到这一点。

我试试这个:

spriteAsset.setActualSize(w,h);
spriteAsset.width = w;
bmd.draw(spriteAsset);

但是当我用graphics.beginBitmapFill()绘制bitmapdata时,我只得到原始的未拉伸图像。

任何指针?或者我需要拍摄9个单独的BitmapData图像并制作9个单独的位图填充?

干杯, -Josh

2 个答案:

答案 0 :(得分:2)

我使用scale9资产的BitmapData.draw()快照的经验是,即使资产已添加到显示列表,scale9也会被丢弃。就我而言,这是一个错误,我不知道是否有报道。

除了scale9令人失望之外,不要忘记BitmapData.draw可以采用矩阵参数。默认情况下,它为null,表示单位矩阵(无缩放,旋转等)。要拍摄已转换资产的快照,您需要提供其转换矩阵...

bmd.draw(spriteAsset, spriteAsset.transform.matrix)

(没有仔细检查这个东西对不起,所以ymmv。)

答案 1 :(得分:0)

Danjp的解决方案很好,但如果您想调整位图数据本身,请尝试使用比例矩阵,即:

var scaledBitmapData:BitmapData = new BitmapData(newWidth, newHeight);
var scaleMatrix:Matrix = new Matrix();
scaleMatrix.scale(scaleFactor, scaleFactor);

scaledBitmapData.draw(bitmap, scaleMatrix);