导入具有透明背景的PNG后,它显示为白色背景

时间:2010-12-28 21:14:31

标签: flex png

由于标题已经说明我在Flex 4应用程序中导入PNG时遇到了(大)问题。

在Photoshop中创建一个透明背景的PNG文件。 使用以下代码加载Flex应用程序:

thumbnailRef.load(); 

thumbnailRef是基于这种方式定义的标记:

    <net:FileReference id="thumbnailRef"
    select="onBrowseThumbnailRef_select(event);"                           
complete="onBrowseThumbnailRef_complete(event);" />

因此,当complete事件触发时,数据已加载,并且可以将加载的数据分配给名为Thumbnail的图像组件:

 private function onBrowseThumbnailRef_complete(evt:Event):void {
                    Thumbnail.source = thumbnailRef.data;
                 }  

Unitls现在一切正常! 但是当我尝试将缩略图组件的数据发送到WCF服务时,我会收到一张白色背景的照片:

var thumbBitmapData :BitmapData = 
    ImageSnapshot.captureBitmapData(Thumbnail.content);
    //this is send to the WCF service               
    ThumbnailByteArray = new PNGEncoder().encode(thumbBitmapData ); 

我做错了吗?

2 个答案:

答案 0 :(得分:0)

使用captureBitmapData时,它将捕获组件,但不仅仅是位图。我认为你有缩略图组件的白色背景。如果您想上传图片,可以尝试上传文件参考。

答案 1 :(得分:0)

@Jason: 说实话,我确实玩过thumbnailRef.data。为了控制正在发生的事情,我将Flex应用程序转换为AIR(桌面)应用程序并附加了这个:

Thumbnail.source = thumbnailRef.data;
//reset read pointer
thumbnailRef.data.position  = 0;
var fl:File = File.desktopDirectory.resolvePath("test.png");
var fs:FileStream=new FileStream();
fs.open(fl,FileMode.WRITE);
fs.writeBytes(thumbnailRef.data);
fs.close();

在桌面上打开test.png文件会显示白色背景!据我所知,我所做的是:加载原始数据(位于thumbnailRef.data中)并将此数据再次保存到文件系统。

如果正确解释这意味着通过加载数据产生“错误”,但我没有任何线索如何拦截加载或自己控制它(或者我应该自己加载数据......如果是的如何?)。

奇怪的事情......