0

s:BitmapImageを含むSkinnableContainerがあります。画像の一部(Rect)を完全に透明にする必要があります。透明な切り欠きを作るだけで、簡単に配置できます。背景の画像はwidth="300" height = "200"で、透明な領域はwidth = "200" height = "20"、right = "0" bottom ="50"である必要があります。BlendMode.OVERLAYでも同様の効果を得ることができましたが、もっと良い方法があるはずです。

何かアイデア、提案をお願いします。

4

2 に答える 2

0
<?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" 
               creationComplete="onComplete(event)"
               backgroundColor="0xEEEEEE">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.graphics.ImageSnapshot;
            import mx.skins.RectangularBorder;      

            protected function onComplete(event:Event):void
            {
                var bW:int = 300;
                var bH:int = 200;

                var X:int = 0;
                var Y:int = 150;
                var W:int = 200;
                var H:int = 20;

                var topRect:Rectangle = new Rectangle(0,0,bW,Y);

                var righRect:Rectangle = new Rectangle(W,0,bW-W,bH);

                var bottomRect:Rectangle = new Rectangle(0,Y+H,bW,bH-(Y+H));

                var targetBitmapData:BitmapData = ImageSnapshot.captureBitmapData(original);

                var newBitmapData:BitmapData = new BitmapData(bW,bH,true,0x00000000);

                newBitmapData.copyPixels(targetBitmapData, topRect, new Point(0, 0),null, null, true);

                newBitmapData.copyPixels(targetBitmapData, righRect, new Point(W, 0),null, null, true);

                newBitmapData.copyPixels(targetBitmapData, bottomRect, new Point(0,Y+H),null, null, true);

                modified.source = new Bitmap(newBitmapData);
            }                   
        ]]>
    </fx:Script>
    <s:VGroup gap="10" left="10" top="10">
        <s:Group id="original">
            <s:Rect width="300" height="200">
                <s:fill>
                    <s:SolidColor/>
                </s:fill>
                <s:stroke>
                    <s:SolidColorStroke color="0xFF0000"/>
                </s:stroke>
            </s:Rect>
        </s:Group>
        <s:Group>
            <mx:Image width="300" height="200" id="modified" />
            <s:Rect top="0" left="0" right="0" bottom="0">
                <s:stroke>
                    <s:SolidColorStroke color="0xFF0000"/>
                </s:stroke>
            </s:Rect>
        </s:Group>          
    </s:VGroup>
</s:Application>

あなたの特定のケースの例ですが、これを拡張するかもしれません。

于 2012-08-07T12:09:41.337 に答える
0

別のオブジェクト (UIMovieClip など) をマスクとして画像に適用できます。Bitmap のピクセルを操作して、BitmapImage のソースとして設定することもできます。これは、特定の要件に応じて意味がある場合と意味がない場合があります。

于 2012-08-07T00:11:48.643 に答える