Flex:使用应用的效果保存mx:image

时间:2011-01-05 20:26:52

标签: flex actionscript-3

我加载图像来控制比我应用一些效果,当我保存图像时,它保存没有效果。我该怎么办?

以下是代码:

private var byteArr2:ByteArray;
private var fileRef:FileReference = new FileReference(); 

public function process():void
{
        var ct:ColorTransform = new  ColorTransform();
        ct.redOffset = 99;
        ct.blueOffset = 11;
            ct.greenOffset = 22;
            currImg.transform.colorTransform = ct;
            callLater(toByteArray);
}

public function toByteArray():void
{
        var data:BitmapData = new BitmapData(currImg.width, currImg.width);
        data.draw(currImg);             
        var encod:JPEGEncoder = new JPEGEncoder(100);               
        byteArr2 = encod.encode(data);
}
public function saveFile():void 
{  
        fileRef.save(byteArr2,"NewFileName1.jpg");
} 
<mx:HBox>       
        <mx:VBox>           
            <s:Button x="69" y="98" label="open" click="open()()"/>
            <s:Button label="show" click="show()"/> 
            <s:Button label="process" click="process()"/>   
            <s:Button label="save" click="saveFile()"/> 
        </mx:VBox>
        <mx:Image id="currImg" width="200" height="300"/>
    </mx:HBox>

更新出现新问题因为我使用var data:BitmapData = new BitmapData(currImg.width, currImg.width);已保存的图片很小(图像控件的大小),但我需要保存原始尺寸的图像。 var data:BitmapData = Bitmap(currImg.content).bitmapData;使用了

2 个答案:

答案 0 :(得分:3)

我会将组件绘制到新的BitmapData对象中,而不是使用currImg的内容。这应该会给你在屏幕上绘制的内容而不是未修改的内容。像这样:

var data:BitmapData = new BitmapData(currImg.width, currImg.width);
data.draw(currImg);

希望有所帮助。

答案 1 :(得分:2)

好吧这不是一个很好的解决方案,因为我不知道它为什么会起作用,但如果你在图像周围放一个容器,那么保存它似乎有用的绘图结果。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.graphics.codec.JPEGEncoder;
            private var byteArr2:ByteArray;
            private var fileRef:FileReference = new FileReference(); 

            public function process():void
            {
                var ct:ColorTransform = new  ColorTransform();
                ct.redOffset = 99;
                ct.blueOffset = 11;
                ct.greenOffset = 22;
                currImg.transform.colorTransform = ct;
                callLater(toByteArray);
            }

            public function toByteArray():void
            {
                var data:BitmapData = new BitmapData(everything.width, everything.width);
                data.draw(everything);             
                var encod:JPEGEncoder = new JPEGEncoder(100);               
                byteArr2 = encod.encode(data);
            }
            public function saveFile():void 
            {  
                fileRef.save(byteArr2,"NewFileName1.jpg");
            } 
        ]]>
    </fx:Script>
    <mx:HBox>       
        <mx:VBox>           
            <!--<s:Button x="69" y="98" label="open" click="open()"/>-->
            <!--<s:Button label="show" click="show()"/> -->
            <s:Button label="process" click="process()"/>   
            <s:Button label="save" click="saveFile()"/> 
        </mx:VBox>
        <mx:Box id="everything">
            <mx:Image id="currImg" width="200" height="300" source="http://www.google.com/images/logos/ps_logo2.png"/>
        </mx:Box>
    </mx:HBox>
</s:Application>

肖恩