2010-07-28 68 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());