我想將組件保存爲JPG文件,我似乎無法獲得BitmapData.draw()給我所期望的像素,而當我打開結果時看到一個普通的白色矩形JPG文件。我首先創建一個包含圖像和標題(下面的MultigraphCanvas)的對象,並且當我將對象顯示爲彈出對象時,它看起來很完美 - 但是,當我嘗試將其繪製爲位圖並將其編碼並保存爲一張JPG我不會以我可以在屏幕上顯示的相同圖像結束。下面的代碼:Flex BitmapData.draw()只繪製一個白色矩形 - 我可以繪製顯示對象的所有元素嗎?
private function saveAsFile(title:String):void
{
// make a canvas containing the multigraph and title
var multigraphCanvas:MultigraphCanvas = new MultigraphCanvas();
multigraphCanvas.initialize();
multigraphCanvas.multigraphGroup = multigraphGroup;
multigraphCanvas.titleText.text = title;
this.addElement(multigraphCanvas);
var matrix:Matrix = new Matrix()
matrix.tx = 0;
matrix.ty = 0;
var multigraphCanvasBitmapData:BitmapData = new BitmapData(multigraphCanvas.width, multigraphCanvas.height, true, 0xffffffff);
multigraphCanvasBitmapData.draw(multigraphCanvas, matrix);
var multigraphCanvasImage:Image = new Image();
multigraphCanvasImage.load(new Bitmap(multigraphCanvasBitmapData));
multigraphCanvasImage.content.width = multigraphCanvas.width;
multigraphCanvasImage.content.height = multigraphCanvas.height;
var multigraphCanvasImageBitmapData:BitmapData = new BitmapData(multigraphCanvas.width, multigraphCanvas.height, true, 0xffffffff);
multigraphCanvasImageBitmapData.draw(multigraphCanvasImage);
// DEBUGGING
PopUpManager.addPopUp(multigraphCanvas, this);
// DEBUGGING
var debugImage:Image = new Image();
debugImage.source = multigraphCanvasImageBitmapData;
var debugTitleWindow:TitleWindow = new TitleWindow();
debugTitleWindow.addElement(debugImage);
PopUpManager.addPopUp(debugTitleWindow, this);
// encode the canvas bitmap into a JPG byte array
var jpgEncoder:JPEGEncoder = new JPEGEncoder(85);
var jpgByteArray:ByteArray = jpgEncoder.encode(multigraphCanvasImageBitmapData);
// save the JPG byte array as a file
var fileReference:FileReference = new FileReference();
fileReference.save(jpgByteArray, title + ".jpg");
}
我能想到的BitmapData.draw()方法來繪製它傳遞的顯示對象的每個部件,或者它只是使最頂層的元素,沒有一個孩子(這是什麼它看起來像我)?
我如何讓它們進入顯示樹?將該組件添加爲顯示對象的組件的子組件或元素? – 2011-04-01 16:17:38