패키지 | flash.filters |
클래스 | public class ConvolutionFilter |
상속 | ConvolutionFilter BitmapFilter Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
회선 필터를 만들려면 new ConvolutionFilter()
구문을 사용합니다. 필터 사용은 필터를 적용할 객체에 따라 달라집니다.
- 동영상 클립, 텍스트 필드, 버튼 및 비디오에 필터를 적용하려면
filters
속성(DisplayObject로부터 상속)을 사용합니다. 객체의filters
속성을 설정해도 객체가 수정되지는 않으며,filters
속성을 지워야 필터를 제거할 수 있습니다. - BitmapData 객체에 필터를 적용하려면
BitmapData.applyFilter()
메서드를 사용합니다. BitmapData 객체에서applyFilter()
를 호출하면 소스 BitmapData 객체와 필터 객체가 사용되고 필터링된 이미지가 결과로 생성됩니다.
표시 객체에 필터를 적용하면 해당 객체의 cacheAsBitmap
속성이 true
로 설정됩니다. 모든 필터를 지우면 cacheAsBitmap
의 원래 값이 복원됩니다.
결과 이미지가 최대 크기를 초과하는 경우 필터는 적용되지 않습니다. AIR 1.5 및 Flash Player 10에서는 최대값이 8,191픽셀(폭 또는 높이)이며 총 픽셀 수는 16,777,215픽셀을 초과할 수 없습니다. 따라서 이미지의 폭이 8,191픽셀이면 높이가 2,048픽셀 이하여야 합니다. Flash Player 9 이전 버전 및 AIR 1.1 이전 버전에서는 이 제한이 높이 2,880픽셀 및 폭 2,880픽셀입니다. 예를 들어 필터가 적용된 큰 동영상 클립을 확대하는 경우 결과 이미지가 최대 크기를 초과하면 필터가 해제됩니다.
관련 API 요소
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
속성 | 정의 주체 | ||
---|---|---|---|
alpha : Number
대체 색상의 알파 투명도 값입니다. | ConvolutionFilter | ||
bias : Number
행렬 변환 결과에 추가할 편차입니다. | ConvolutionFilter | ||
clamp : Boolean
이미지를 고정할지 여부를 나타냅니다. | ConvolutionFilter | ||
color : uint
소스 이미지를 벗어난 픽셀을 대체할 16진수 색상입니다. | ConvolutionFilter | ||
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
divisor : Number
행렬 변환 과정에서 사용된 제수입니다. | ConvolutionFilter | ||
matrix : Array
행렬 변환에 사용되는 값의 배열입니다. | ConvolutionFilter | ||
matrixX : Number
행렬의 x 크기(행렬의 열 수)입니다. | ConvolutionFilter | ||
matrixY : Number
행렬의 y 크기(행렬의 행 수)입니다. | ConvolutionFilter | ||
preserveAlpha : Boolean
알파 채널이 필터 효과 없이 유지되는지 아니면 색상 채널은 물론 알파 채널에도 회선 필터가 적용되는지를 나타냅니다. | ConvolutionFilter |
메서드 | 정의 주체 | ||
---|---|---|---|
ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
ConvolutionFilter 인스턴스를 지정된 매개 변수로 초기화합니다. | ConvolutionFilter | ||
[재정의]
이 필터 객체의 복사본을 반환합니다. | ConvolutionFilter | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
alpha | 속성 |
bias | 속성 |
clamp | 속성 |
clamp:Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
이미지를 고정할지 여부를 나타냅니다. 소스 이미지를 벗어난 픽셀의 경우 true
값은 입력 이미지 각 가장자리의 색상 값을 복사해 필요한 만큼 각 경계를 따라 입력 이미지가 확장됨을 의미합니다. false
값은 color
및 alpha
속성에 지정된 대로 다른 색상을 사용해야 함을 나타냅니다. 기본값은 true
입니다.
구현
public function get clamp():Boolean
public function set clamp(value:Boolean):void
예제 ( 예제 사용 방법 )
BitmapData
클래스를 사용하여 두 개의 상자(하나는 다른 상자의 절반 크기)를 만드는 예제입니다. 예제가 처음 로드되면 attachBitmap()
을 사용하여 mc
내에 더 큰 상자가 그려집니다. mc
를 클릭하고 applyFilter()
메서드가 호출되면 BitmapData
의 largeBox
인스턴스가 소스 비트맵인 smallBox
와 함께 다시 그려집니다. applyFilter()
는 Rectangle
위에 largeBox
와 같은 폭 및 높이로 지정된 smallBox
를 그리므로 소스 비트맵은 드로잉 영역보다 작습니다. 이 경우 ConvolutionFilter
의 clamp
속성은 false
로 설정되고, 소스 비트맵인 smallBox
에 의해 가려지지 않은 영역은 clampColor
및 clampAlpha
변수에 의해 지정된 단색의 빨강이 됩니다.
package { import flash.display.Sprite; import flash.display.BitmapData; import flash.filters.ConvolutionFilter; import flash.text.TextField; import flash.geom.Rectangle; import flash.geom.Point; public class ConvolutionClampExample extends Sprite { // Variables that affect clamping: var clamp:Boolean = false; var clampColor:Number = 0xFF0000; var clampAlpha:Number = 1; // For illustration, keep other ConvolutionFilter variables neutral: var bias:Number = 0; var preserveAlpha:Boolean = false; // Also, construct a neutral matrix var matrixCols:Number = 3; var matrixRows:Number = 3; var matrix:Array = [ 1,1,1, 1,1,1, 1,1,1 ]; var filter:ConvolutionFilter = new ConvolutionFilter(matrixCols, matrixRows, matrix, matrix.length, bias, preserveAlpha, clamp, clampColor, clampAlpha); var largeBoxWidth:Number = 100; var largeBoxHeight:Number = 100; var largeBox:BitmapData = new BitmapData(largeBoxWidth, largeBoxWidth, true, 0xCC00FF00); var smallBoxWidth:Number = largeBoxWidth / 2; var smallBoxHeight:Number = largeBoxHeight / 2; var smallBox:BitmapData = new BitmapData(smallBoxWidth, smallBoxWidth, true, 0xCC0000FF); var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth()); mc.attachBitmap(largeBox, this.getNextHighestDepth()); mc.onPress = function() { largeBox.applyFilter(smallBox, new Rectangle(0,0, largeBoxWidth, largeBoxHeight), new Point(0,0), filter); } } }
color | 속성 |
divisor | 속성 |
matrix | 속성 |
matrix:Array
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
행렬 변환에 사용되는 값의 배열입니다. 배열의 항목 수는 matrixX * matrixY
와 동일해야 합니다.
행렬 회선은 픽셀 결과 값을 얻기 위해 입력 이미지에 지정된 픽셀 값과 인접한 픽셀 값이 결합되는 방식을 나타내는 n x m 행렬을 기반으로 합니다. 각 픽셀 결과 값은 대응하는 소스 픽셀과 인접한 픽셀에 그 배열을 적용함으로써 얻을 수 있습니다.
예를 들어 3 x 3 행렬 회선의 경우에는 다음 공식을 각각의 색상 채널에 적용합니다.
dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1....
src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor) + bias
SSE(스트리밍 SIMD 확장명)를 제공하는 프로세스를 실행하면, 일부 필터 사양은 실행 속도가 더 빨라집니다. 다음은 회선 작업의 속도를 높일 수 있는 기준입니다.
- 필터는 3 x 3 필터여야 합니다.
- 모든 필터 수치는 -127과 +127사이의 정수이어야 합니다.
- 필터 수치의 합은 127보다 큰 절대값을 가질 수 없습니다.
- 필터 수치가 음이면 제수는 2.00001과 256 사이의 값이어야 합니다.
- 모든 필터 수치가 양이면 제수는 1.1과 256 사이의 값이어야 합니다.
- 편차는 정수여야 합니다.
참고: 매개 변수 없이 생성자를 사용하여 ConvolutionFilter 인스턴스를 만드는 경우 Matrix 속성에 값을 지정하는 순서에 따라 필터의 비헤이비어가 달라집니다. 다음과 같은 경우 matrixX
및 matrixY
속성이 0
(기본값)으로 설정되어 있으면 행렬 배열이 할당됩니다.
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
다음과 같은 경우 matrixX
및 matrixY
속성이 3
으로 설정되어 있으면 행렬 배열이 할당됩니다.
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
구현
public function get matrix():Array
public function set matrix(value:Array):void
오류
TypeError — 설정 중인 Array가 null입니다.
|
matrixX | 속성 |
matrixY | 속성 |
preserveAlpha | 속성 |
preserveAlpha:Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
알파 채널이 필터 효과 없이 유지되는지 아니면 색상 채널은 물론 알파 채널에도 회선 필터가 적용되는지를 나타냅니다. false
값은 알파 채널을 포함하는 모든 채널에 회선이 적용됨을 나타냅니다. true
값은 색상 채널에만 회선이 적용됨을 나타냅니다. 기본값은 true
입니다.
구현
public function get preserveAlpha():Boolean
public function set preserveAlpha(value:Boolean):void
ConvolutionFilter | () | 생성자 |
public function ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
ConvolutionFilter 인스턴스를 지정된 매개 변수로 초기화합니다.
매개 변수matrixX:Number (default = 0 ) — 행렬의 x 크기(행렬의 열 수)입니다. 기본값은 0입니다.
| |
matrixY:Number (default = 0 ) — 행렬의 y 크기(행렬의 행 수)입니다. 기본값은 0입니다.
| |
matrix:Array (default = null ) — 행렬 변환에 사용되는 값의 배열입니다. 배열의 항목 수는 matrixX * matrixY 와 동일해야 합니다.
| |
divisor:Number (default = 1.0 ) — 행렬 변환 과정에서 사용된 제수입니다. 기본값은 1입니다. 제수는 모든 행렬 값의 합으로 결과물의 전체 색상 강도를 고르게 합니다. 값이 0이면 무시되고 대신 기본값이 사용됩니다.
| |
bias:Number (default = 0.0 ) — 행렬 변환 결과에 추가할 편차입니다. 기본값은 0입니다.
| |
preserveAlpha:Boolean (default = true ) — false 값은 알파 값이 유지되지 않고 알파 채널을 포함한 모든 채널에 회선이 적용된다는 것을 나타냅니다. true 값은 색상 채널에만 회선이 적용됨을 나타냅니다. 기본값은 true 입니다.
| |
clamp:Boolean (default = true ) — 소스 이미지를 벗어난 픽셀의 경우 true 값은 지정된 입력 이미지 가장자리의 색상 값을 복사해 필요한 만큼 각 경계를 따라 입력 이미지가 확장됨을 의미합니다. false 값은 color 및 alpha 속성에 지정된 대로 다른 색상을 사용해야 함을 나타냅니다. 기본값은 true 입니다.
| |
color:uint (default = 0 ) — 소스 이미지를 벗어난 픽셀을 대체할 16진수 색상입니다.
| |
alpha:Number (default = 0.0 ) — 대체 색상의 알파입니다.
|
clone | () | 메서드 |
override public function clone():BitmapFilter
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
이 필터 객체의 복사본을 반환합니다.
반환값BitmapFilter — 원본 ConvolutionMatrixFilter 인스턴스와 속성이 같은 새 ConvolutionFilter 인스턴스입니다.
|
buildChild()
를 네 번 호출합니다. buildChild()
에 대한 각 호출은 첫 번째 인스턴스에는 필터를 적용하지 않고 이후의 각 인스턴스에는 서로 다른 회선 필터를 적용하는 함수를 인수로 사용합니다.
buildChild()
함수는 새 Loader 객체를 만들고 이름을 loader
로 지정합니다. buildChild()
를 호출할 때마다 complete
이벤트를 수신하기 위한 이벤트 리스너를 Loader 객체에 연결하며, 이것은 buildChild()
에 전달되는 함수에 의해 처리됩니다.
applyBrightness()
, applySharpness()
및 applyOutline()
함수는 matrix
배열에 여러 다른 값을 사용하여 다양한 ConvolutionFilter 효과를 냅니다.
참고: 최상의 결과를 얻으려면 폭이 약 80픽셀인 이미지를 사용하는 것이 좋습니다. 이미지 파일의 이름과 위치는 url
속성에 전달한 값과 일치해야 합니다. 예를 들어 이 예제에서는 url
에 전달된 값이 SWF 파일과 같은 디렉토리에 있는 "Image.jpg"라는 이름의 이미지 파일을 가리킵니다.
package { import flash.display.DisplayObject; import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.filters.BitmapFilter; import flash.filters.ConvolutionFilter; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class ConvolutionFilterExample extends Sprite { private var size:uint = 140; private var url:String = "Image.jpg"; public function ConvolutionFilterExample() { buildChild(applyNothing); buildChild(applyBrightness); buildChild(applySharpness); buildChild(applyOutline); } private function buildChild(loadHandler:Function):void { var loader:Loader = new Loader(); loader.x = numChildren * size; loader.y = size; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); if(loadHandler != null) { loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler); } var request:URLRequest = new URLRequest(url); loader.load(request); addChild(loader); } private function applyNothing(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); applyLabel(child, "no filter"); } private function applyBrightness(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [5, 5, 5, 5, 0, 5, 5, 5, 5]; applyFilter(child, matrix); applyLabel(child, "brightness"); } private function applySharpness(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [0, -1, 0, -1, 20, -1, 0, -1, 0]; applyFilter(child, matrix); applyLabel(child, "sharpness"); } private function applyOutline(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [-30, 30, 0, -30, 30, 0, -30, 30, 0]; applyFilter(child, matrix); applyLabel(child, "outline"); } private function applyFilter(child:DisplayObject, matrix:Array):void { var matrixX:Number = 3; var matrixY:Number = 3; var divisor:Number = 9; var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor); var filters:Array = new Array(); filters.push(filter); child.filters = filters; } private function applyLabel(child:DisplayObject, label:String):void { var tf:TextField = new TextField(); tf.x = child.x; tf.y = child.height; tf.autoSize = TextFieldAutoSize.LEFT; tf.text = label; addChild(tf); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 03:17 PM Z