AS3将光栅剪辑为用于打印的精灵

时间:2013-02-05 21:13:33

标签: actionscript-3 printing

我目前在打印多页文档时遇到了令人沮丧的问题。基本上我在舞台上有一个movieclip(printArea),它包含几个元素,包括使用loader组件加载的图像,datagrid组件和一些其他各种元素。

此影片剪辑充当单个页面的模板;您调整选项,然后单击“添加页面”并再次更改为第二页,依此类推。我遇到的问题是将页面添加到数组中以便稍后使用addPage()进行循环。据我所知,精灵或影片剪辑最好传递给addPage。我觉得复制影片剪辑,然后使用数据,大小调整和定位集重新初始化所有组件是完全过分的。我不能传递movieclip本身,因为我需要从一个实例建模几个页面。有没有办法简单地栅格化影片剪辑以将其传递给addPage()?这是我目前找到的唯一解决方案,但打印输出的质量很糟糕:

//So let's say I want to add the movie clip's current state to the array :

multiPages.push(duplicateMC(printArea));
function duplicateMC(mc)
{
    var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
    tempImg.draw(mc);
    var fullImg = new Bitmap(tempImg);
    var newImg = DisplayConverter.bitmapToSprite(fullImg,true);
    multiPages.push(newImg);
}

//DisplayConverter function in a seperate file (Snagged this online somewhere) :

public static function bitmapToSprite(bitmap:Bitmap, smoothing:Boolean = false):Sprite
{
    var sprite:Sprite = new Sprite();
    sprite.addChild( new Bitmap(bitmap.bitmapData.clone(), "auto", smoothing));
    return sprite;
}

在此先感谢,这对我来说是一个巨大的痛苦。

1 个答案:

答案 0 :(得分:1)

不要过于复杂。
您没有缩放,因此不要打开捕捉或平滑,因为这会扭曲图像并降低质量 将“image / BMD”存储在数组中,以便在打印时返回它。 存储更多然后BMD是浪费的记忆。

function doMyPrinting( ):void{
  for each( var item:BitmapData in multiPages){
    var page:Sprite = new Sprite();
    page.addChild(new Bitmap(item));
    printJob.addPage(page);
  }
}





multiPages.push(duplicateMC(printArea));
function duplicateMC(mc):void
{
    var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
    tempImg.draw(mc);
    multiPages.push(tempImg);
}