繁体   English   中英

Flex:保存具有应用效果的mx:image

[英]Flex: Saving mx:image with applied effects

我加载图像以进行控制,而不是应用某些效果,并且保存图像时即没有效果也保存。 我该怎么办?

这是代码:

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; 有效

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

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

希望能有所帮助。

好吧,这不是一个很好的解决方案,因为我不知道为什么会这样,但是如果您在图像周围放置一个容器,则可以保存看起来可行的绘图结果。

<?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>

肖恩

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM