[FlashPlayer10]A minimal template for using Pixel Bender Filters
フィルターデータはAdobe – Pixel Bender Filtersを利用(Crystallize.pbj)。ギャラリーには他にも面白そうなものがいくつかあったので遊べそう。ところでadobeで配布されている個人制作フィルターなんだけど、何でフィルタープロパティに関して説明がないんだろう。今回はフィルターデータの内部をfor文で走査してプロパティを見つけた。他に便利な方法がないようであれば次回にでも書きます。あと、よく見たらビキニじゃなかった。
[関連リンク]
The Back Button » Working with Shaders/Filters in Flash 10
The Flash Blog » Loading Pixel Bender Filters in Flash 10
AstroのShaderFilter
AIF Toolkitメモ
[FlashPlayer10]Bikini de Mosaic (要Flash Plaeyer 10)
ソース。たぶんPixel Bender Filterを利用するのに必要な最小限の内容しかないのでテンプレートみたいに使えると思う(もちろんフィルターのプロパティは変わる)。スライダーに関しては本質的ではないので割愛してます。
package { /* * Requires Flex SDK 3.0.1 or later to be compiled. */ import flash.display.Bitmap; import flash.display.Shader; import flash.display.Sprite; import flash.events.Event; import flash.filters.ShaderFilter; [SWF(width="550",height="400",backgroundColor="0x0",frameRate="24")] public class PixelBender03 extends Sprite{ [Embed(source="data/250.jpg")] private var TestImage:Class; //Set mime-type as "binary", //because the pbj object is in the binary form. [Embed(source="data/Crystallize.pbj", mimeType="application/octet-stream")] private var PbjObject:Class; private var img:Bitmap; private var shader:Shader; private var filter:ShaderFilter; private var slider:SimpleSlider; public function PixelBender03(){ //Photo img = new TestImage(); img.x = stage.stageWidth/2 - img.width/2; img.y = stage.stageHeight/2 - img.height/2; addChild(img); //Pixel Bender filter shader = new Shader(new PbjObject()); filter= new ShaderFilter(shader); var minValue:Number = shader.data.size["minValue"]; var maxValue:Number = shader.data.size["maxValue"]; var defaultValue:Number = shader.data.size["defaultValue"]; shader.data.size.value = [defaultValue]; img.filters = [filter]; //Slider has a value between the 1st (min) and 2nd-argument (max), //and the default value is defined by the 3rd-argument. slider = new SimpleSlider(minValue,maxValue,defaultValue); slider.x = 100; slider.y = stage.stageHeight/2 - slider.height/2; addChild(slider); slider.addEventListener(Event.CHANGE,onChange); } private function onChange(e:Event):void{ shader.data.size["value"] = [slider.value]; img.filters = [filter]; } } }