Hatena::Groupsubtech

#生存戦略 、それは

-> 07 { 03 / 14 }

ConvolutionFilter Interface

23:41 | はてなブックマーク - ConvolutionFilter Interface - #生存戦略 、それは

http://lab.rails2u.com/swf/convolution_filter_interface

ConvolutionFilter での matrix の適用値がどれぐらいだとどんな効果になるのか解らなかったので、感覚でつかむために適当なインターフェイス用意してみた。flex2 はこういうとき超便利だなぁ。fcsh 使ってもコンパイルが遅すぎるけど…。

以下ソース

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" initialize="init()" backgroundColor="#ffffff">
  <mx:Script>
    <![CDATA[
    private function init():void {
        setImage();
        applyFilter();
    }

    private function setImage():void {
        image.source = imageUrl.text;
    }

    private function applyFilter():void {
        var matrixX:Number = 3;
        var matrixY:Number = 3;
        var divisor:Number = 9;
        var matrix:Array = [
            int(m1.value), int(m2.value), int(m3.value),
            int(m4.value), int(m5.value), int(m6.value),
            int(m7.value), int(m8.value), int(m9.value)
        ];
        var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor);
        var filters:Array = new Array();
        filters.push(filter);
        image.filters = filters;
    }

    ]]>
  </mx:Script>
    <mx:VBox width="60%" horizontalAlign="center">
      <mx:Panel id="mainPanel" title="ConvolutionFilterInterface" styleName="mainPanel" width="100%">
        <mx:Box width="100%" horizontalAlign="center" paddingTop="15">
            <mx:Image id="image"/>
        </mx:Box>
        <mx:Form width="100%" defaultButton="{Submit}">
            <mx:Box width="100%" horizontalAlign="center">
              <mx:Label text="ConvolutionFilter 3x3 Matrix"/>
              <mx:HBox>
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m1" width="75" value="5" />
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m2" width="75" value="-1" />
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m3" width="75" value="20" />
              </mx:HBox>
              <mx:HBox>
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m4" width="75" value="1" />
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m5" width="75" value="-20" />
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m6" width="75" value="-1" />
              </mx:HBox>
              <mx:HBox>
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m7" width="75" value="5" />
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m8" width="75" value="1" />
                <mx:NumericStepper minimum="-1000" change="applyFilter();" maximum="1000" id="m9" width="75" value="5" />
              </mx:HBox>
            </mx:Box>
          <mx:Box textAlign="center" width="100%" horizontalAlign="center">
            <mx:Button id="Submit" label="apply" click="applyFilter();" />
          </mx:Box>
        </mx:Form>
        <mx:Form width="100%" defaultButton="{imageSubmit}">
          <mx:TextInput id="imageUrl" text="http://f.hatena.ne.jp/images/fotolife/s/secondlife/20070312/20070312065825.jpg" width="100%"/>
          <mx:Button id="imageSubmit" label="set image" click="setImage();" />
        </mx:Form>
      </mx:Panel>
    </mx:VBox>
</mx:Application>
トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20070314