在Flex中使用ColorMatrixFilter和HDividedBox

时间:2009-06-08 18:22:39

标签: flex flash

我想使用带有HDividedBox元素的ColorMatrixFilter,以便左右框使图表变为黑色&白色,但中间部分保持颜色。

似乎过滤器必须在AreaChart而不是HDividedBox上,但我想知道是否有办法设置画布来掩盖它们背后的内容。

我目前的代码如下;灰色滤镜无效。

<mx:HDividedBox id="dividedBox" horizontalScrollPolicy="off"
        width="100%" height="100%" 
        liveDragging="true" >
    <mx:Canvas id="leftBox" backgroundColor="#FFFFFF" 
            backgroundAlpha="0.5" width="50%" 
            height="100%" />
    <mx:Canvas backgroundColor="#FFFFFF" backgroundAlpha="0" 
            width="50%" height="100%" buttonMode="true"   
            mouseDown="setMouseDown(rangeChart);" 
            minWidth="{rangeDataRatio * 4}"
    mouseUp="showAnnotations = true; refreshAnnotations()"/>
<mx:Canvas id="rightBox" backgroundColor="#FFFFFF" 
    backgroundAlpha="0.5" width="0%" height="100%"
    filters="{[greyFilter]}" />
</mx:HDividedBox>

过滤器代码如下:

var greyMatrix:Array = [ 
    1,1,1,0,0,
    1,1,1,0,0,
    1,1,1,0,0,
    0,0,0,1,0 ];

var greyFilter:ColorMatrixFilter = 
    new ColorMatrixFilter(greyMatrix);

1 个答案:

答案 0 :(得分:1)

过滤器仅应用于应用它们的对象的内容。 所以,如果你在rightBox画布中有东西,那么应该在应用过滤器的情况下看到它。但是,如果对象不是此画布的子对象,则不会应用过滤器。

您可以尝试使用BitmapData对象及其draw方法捕获画布下方的图像,并将滤镜应用于生成的位图。