패키지 | flash.filters |
클래스 | public final class ColorMatrixFilter |
상속 | ColorMatrixFilter BitmapFilter Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
참고: RGBA 값의 경우, 최상위 바이트는 빨강 채널 값을 표시하며 그 다음은 녹색, 파랑, 알파 값을 표시합니다.
새 색상 행렬 필터를 만들려면 new ColorMatrixFilter()
구문을 사용합니다. 필터 사용은 필터를 적용할 객체에 따라 달라집니다.
- 동영상 클립, 텍스트 필드, 버튼 및 비디오에 필터를 적용하려면
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.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
matrix : Array
4 x 5 색상 변환을 적용할 20개 항목을 갖는 배열입니다. | ColorMatrixFilter |
메서드 | 정의 주체 | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
지정된 매개 변수로 새 ColorMatrixFilter 인스턴스를 초기화합니다. | ColorMatrixFilter | ||
[재정의]
이 필터 객체의 복사본을 반환합니다. | ColorMatrixFilter | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
matrix | 속성 |
matrix:Array
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
4 x 5 색상 변환을 적용할 20개 항목을 갖는 배열입니다. matrix
속성은 해당 값을 직접 수정하는 방식으로 변경할 수 없습니다(예: myFilter.matrix[2] = 1;
). 대신 배열에 대한 참조를 가져와서 변경한 다음 값을 재설정해야 합니다.
색상 행렬 필터는 각 소스 픽셀을 빨강(srcR), 녹색(srcG), 파랑(srcB) 및 알파(srcA) 요소로 분리합니다. 네 채널의 각 결과를 계산하려면 이미지의 각 픽셀 값에 변형 행렬의 값을 곱해야 합니다. -255에서 255 사이의 오프셋을 각 결과(행렬 각 행의 다섯 번째 항목)에 선택적으로 추가할 수 있습니다. 이 필터는 각 색상 요소를 다시 단일 픽셀로 결합하고 그 결과를 기록합니다. 다음 공식에서 a[0]부터 a[19]까지는 matrix
속성에 전달되는 20개 항목을 가진 배열에서 0부터 19까지의 항목에 대응됩니다.
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4] greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9] blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14] alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
배열의 각 색상 값에서 값 1은 색상 채널의 값을 유지하면서 출력으로 전송되는 채널의 100%와 동일합니다.
연산은 곱하지 않은 색상값에 실행됩니다. 입력 그래픽이 미리 곱해진 색상 값으로 구성된 경우 이러한 값은 이 연산을 위해 자동으로 곱해지지 않은 색상 값으로 변환됩니다.
다음과 같은 두 개의 최적화된 모드를 사용할 수 있습니다.
알파에만 적용 다음과 같이 알파 요소만 조절하는 행렬를 필터에 전달하면 필터 성능이 최적화됩니다.
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 N 0 (where N is between 0.0 and 1.0)
고속 버전 Intel® Pentium® 3 이상 및 Apple® G4 이상과 같이 SSE/AltiVec 액셀러레이터가 활성화된 프로세서에서만 사용할 수 있습니다. 액셀러레이터는 승수의 수치가 -15.99에서 15.99 사이에 있고 더해지는 수의 수치 a[4], a[9], a[14] 및 a[19]가 -8000에서 8000 사이에 있을 때 사용됩니다.
구현
public function get matrix():Array
public function set matrix(value:Array):void
오류
TypeError — 설정 중인 Array가 null입니다.
|
ColorMatrixFilter | () | 생성자 |
clone | () | 메서드 |
override public function clone():BitmapFilter
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
이 필터 객체의 복사본을 반환합니다.
반환값BitmapFilter — 원본과 모든 속성이 같은 새 ColorMatrixFilter 인스턴스입니다.
|
buildChild()
를 네 번 호출합니다. buildChild()
에 대한 첫 번째 호출에서는 null
을 인수로 사용하여 첫 번째 인스턴스에 필터를 적용하지 않습니다. 다음 buildChild()
호출부터는 이후의 각 이미지 인스턴스에 서로 다른 색상 행렬 필터를 적용하는 함수를 인수로 사용합니다.
buildChild()
함수는 새 Loader 객체를 만들고 이름을 loader
로 지정합니다. buildChild()
를 호출할 때마다 complete
이벤트를 수신하기 위한 이벤트 리스너를 Loader 객체에 연결하며, 이것은 buildChild()
에 전달되는 함수에 의해 처리됩니다.
applyRed()
, applyGreen()
및 applyBlue()
함수는 matrix
배열에 여러 다른 값을 사용하여 다양한 효과를 냅니다.
참고: 최상의 결과를 얻으려면 폭이 약 80픽셀인 이미지를 사용하는 것이 좋습니다. 이미지 파일의 이름과 위치는 url
속성에 전달한 값과 일치해야 합니다. 예를 들어 이 예제에서는 url
에 전달된 값이 SWF 파일과 같은 디렉토리에 있는 "Image.jpg"라는 이름의 이미지 파일을 가리킵니다.
package { import flash.display.DisplayObject; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.filters.ColorMatrixFilter; import flash.net.URLRequest; public class ColorMatrixFilterExample extends Sprite { private var size:uint = 140; private var url:String = "Image.jpg"; public function ColorMatrixFilterExample() { buildChild(null); buildChild(applyRed); buildChild(applyGreen); buildChild(applyBlue); } 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 applyRed(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([1, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 0, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 0, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyGreen(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([0, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 1, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 0, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyBlue(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([0, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 0, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 1, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyFilter(child:DisplayObject, matrix:Array):void { var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix); var filters:Array = new Array(); filters.push(filter); child.filters = filters; } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 03:17 PM Z