2010-07-28 64 views
0

我想將圖像放置在位圖的柔性畫布組件中。我能夠達到我沒有收到錯誤的地步,但是沒有圖像顯示出來,我保存爲jpg的圖像是空白的。我想我沒有正確設置位圖數據,但無法弄清楚我做錯了什麼。將具有圖像的柔性組件轉換爲位圖

這裏是我將其轉換爲位圖的代碼:

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop); 
    var imageByteArray:ByteArray = imageSnap.data as ByteArray; 
    var bLoader:Loader = new Loader(); 
    bLoader.loadBytes(imageByteArray); 

    var bmd:BitmapData = new BitmapData(500,500); 
    bmd.draw(bLoader); 

    var imgTest:Image = new Image(); 
    imgTest.source = bmd; 
    _renderPop.renderCanvas.addChild(imgTest); 



    var fileRef:FileReference = new FileReference(); 
    fileRef.save(bLoader, 'testImage.jpg'); 

_renderPop.renderCanvas是我在哪裏放置圖像。有人看到有什麼不對嗎?

回答

0

在您的代碼:

var bLoader:Loader = new Loader(); 
bLoader.loadBytes(imageByteArray); 

...你假設字節被立即加載;嘗試把事件偵聽器對裝載機如下:

bLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 

private function completeHandler(event:Event):void 
{ 
    // ... the rest of your code goes here 
} 

loadBytes函數類似於負荷功能,它們都是異步的過程,所以你需要的事件監聽器。這有點違反直覺,我自己也犯過幾次相同的錯誤。

如果還是不行,也許漏下的contentLoaderInfo財產,但上面的應該工作...

讓我知道如果你回來吧:)

+0

好的,謝謝,這樣似乎讓我有點進一步。但是現在我得到一個無效的bitmapdata錯誤。你有沒有看到我可能需要做的其他事情才能正確捕獲位圖數據? – pfunc 2010-07-28 19:43:41

+0

只是爲了澄清,我正在該線路上無效的BitmapData錯誤: VAR imageSnap:將ImageSnapshot = ImageSnapshot.captureImage(_renderPop.renderCanvas,150); 如果我只是使用_renderPop,那麼我不會得到一個錯誤,但我得到一個空白的bitmapImage。 _renderPop.renderCanvas是一個mx:Canvas對象。我可以追查它,它在那裏。 – pfunc 2010-07-28 20:20:43

+0

你使用的ImageSnapshot類是什麼?不要使用該組件,請嘗試手動執行此操作...... InsideRIA上有一篇非常有趣的博客文章,用於完成此操作(還有更多!) http://insideria.com/2008/03/image-manipulation-in -flex.html 這有幫助嗎? – infomaniac 2010-07-28 20:30:11

1

你「裝載機」代碼是錯的。剛剛拍攝圖像後,您可以同時保存數據用FileReference:

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop); 
var fileRef:FileReference = new FileReference();  
fileRef.save(imageSnap.data, 'testImage.png'); 

這imageSnap含有不的BitmapData但png圖片字節。爲了顯示圖像,你需要捕獲的BitmapData而不是圖像,並從位圖數據創建位圖:

var bmd:BitmapData = ImageSnapshot.captureBitmapData(_renderPop); 
var imgTest:Image = new Image(); 
imgTest.source = new Bitmap(bmd); 
_renderPop.renderCanvas.addChild(imgTest); 

在本地的結果是testImage.png文件系統上創建,它是在畫布上顯示。如果你需要JPG格式,你應該指定:

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop, 0, new JPEGEncoder());