使用 FLEX 为特定元素设置亮度对比度色调饱和度

setting Brightness Contrast Hue Saturation for a specific element with FLEX

我试图让用户使用滑块为远程用户相机设置亮度、对比度、色调和饱和度(这只会影响正在调整首选项的本地用户)。我在这里看不到 class:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html# 所以我使用下面的库将元素 "remoteVideo"(远程摄像机)设置为用户想要的任何亮度、对比度、色相和饱和度。我收到 color.brightness.remoteVideo(0, BrightnessSlider.value) 的语法错误; (以及对比度、色调和饱和度)表示(此行有多个标记。1119:通过使用 fl.motion.adjustcolor 的引用访问未定义的 属性 亮度 & - 访问未定义的 属性 remoteVideo ,这是明确定义的,因为 RTMFP 视频聊天 works\compiles 没有下面的代码就可以了:

(如果有帮助,下面没有我更改的原始源代码:https://github.com/MonaSolutions/MonaClients/blob/master/VideoPhone/src/VideoPhone.mxml

// 亮度对比度色调饱和度库

import flash.display.Sprite;
import fl.motion.AdjustColor;
import flash.filters.ColorMatrixFilter;
import fl.events.SliderEvent;   
import flash.external.ExternalInterface;

// 亮度对比度色调饱和度变量

        private var color:AdjustColor = new AdjustColor(); //This object will hold the color properties
        private var filter:ColorMatrixFilter; //Will store the modified color filter to change the video

// 固定 函数

        private function BrightnessLevel(e:Event = null):void
        {
            color.brightness = BrightnessSlider.value;
            var mMatrix:Array = color.CalculateFinalFlatArray();
            filter = new ColorMatrixFilter(mMatrix);
            remoteVideo.filters = [filter];
            status("Setting brightness to: " + BrightnessSlider.value + "\n");
        }

        private function ContrastLevel(e:Event = null):void
        {

            color.contrast = ContrastSlider.value;
            var mMatrix:Array = color.CalculateFinalFlatArray();
            filter = new ColorMatrixFilter(mMatrix);
            remoteVideo.filters = [filter];
            status("Setting contrast to: " + ContrastSlider.value + "\n");

        }

        private function HueLevel(e:Event = null):void
        {


            color.hue = HueSlider.value;
            var mMatrix:Array = color.CalculateFinalFlatArray();
            filter = new ColorMatrixFilter(mMatrix);
            remoteVideo.filters = [filter];
            status("Setting hue to: " + HueSlider.value + "\n");

        }

        private function SaturationLevel(e:Event = null):void
        {


            color.saturation = SaturationSlider.value;
            var mMatrix:Array = color.CalculateFinalFlatArray();
            filter = new ColorMatrixFilter(mMatrix);
            remoteVideo.filters = [filter];
            status("Setting saturation to: " + SaturationSlider.value + "\n");

        }

// 亮度对比度色调饱和度滑块

        <s:NavigatorContent label="ADJUST COLORS" enabled="{currentState != LoginNotConnected}">
            <s:layout>
                <s:HorizontalLayout/>
            </s:layout>

            <s:VGroup>
                <s:HGroup>
                    <s:Panel width="247" height="67.5" backgroundColor="0xA0A0A0"
                             title="Brightness">
                        <s:layout>
                            <s:VerticalLayout paddingLeft="8"/>
                        </s:layout>
                        <s:HSlider id="BrightnessSlider" width="220"
                                   change="BrightnessLevel(event)" maximum="100" minimum="-100"
                                   showDataTip="false" value="0"/>
                    </s:Panel>

                    <s:Panel width="247" height="67.5" backgroundColor="0xA0A0A0"
                             title="Contrast">
                        <s:layout>
                            <s:VerticalLayout paddingLeft="8"/>
                        </s:layout>
                        <s:HSlider id="ContrastSlider" width="220" change="ContrastLevel(event)"
                                   maximum="100" minimum="-100" showDataTip="false" value="0"/>
                    </s:Panel>
                </s:HGroup>

                <s:HGroup>

                    <s:Panel width="247" height="67.5" backgroundColor="0xA0A0A0" title="Hue">
                        <s:layout>
                            <s:VerticalLayout paddingLeft="8"/>
                        </s:layout>
                        <s:HSlider id="HueSlider" width="220" change="HueLevel(event)"
                                   maximum="180" minimum="-180" showDataTip="false" value="0"/>
                    </s:Panel>
                    <s:Panel width="247" height="67.5" backgroundColor="0xA0A0A0"
                             title="Saturation">
                        <s:layout>
                            <s:VerticalLayout paddingLeft="8"/>
                        </s:layout>
                        <s:HSlider id="SaturationSlider" width="220"
                                   change="SaturationLevel(event)" maximum="100" minimum="-100"
                                   showDataTip="false" value="0"/>
                    </s:Panel>
                </s:HGroup>
            </s:VGroup>




        </s:NavigatorContent>

根据 AdjustColor 的文档,每个属性(亮度、对比度、色调、饱和度)都是一个数字。所以这一行:

color.brightness.remoteVideo(0, BrightnessSlider.value);

正在尝试从 color.brightness 访问 属性 remoteVideo,这是一个数字。它告诉你 Number.

上没有 属性 "remoteVideo"

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/motion/AdjustColor.html

编辑: 像这样的东西可能有效也可能无效:(我还没有测试过)

color.brightness = BrightnessSlider.value;
var mMatrix:Array = color.CalculateFinalFlatArray();
filter = new ColorMatrixFilter(mMatrix);
remoteVideo.filters = [filter];

您可以通过实例化一次并仅更新其矩阵来避免不断创建新的过滤器 属性。

    private var color:AdjustColor = new AdjustColor(); //This object will hold the color properties
    private var filter:ColorMatrixFilter = new ColorMatrixFilter(); //Will store the modified color filter to change the video

    private function BrightnessLevel(e:Event = null):void
    {
        status("Setting brightness to: " + BrightnessSlider.value + "\n");
        color.brightness = BrightnessSlider.value;
        applyFilter();
    }

    private function ContrastLevel(e:Event = null):void
    {
        status("Setting contrast to: " + ContrastSlider.value + "\n");
        color.contrast = ContrastSlider.value;
        applyFilter();
    }

    private function HueLevel(e:Event = null):void
    {
        status("Setting hue to: " + HueSlider.value + "\n");
        color.hue = HueSlider.value;
        applyFilter();
    }

    private function SaturationLevel(e:Event = null):void
    {
        status("Setting saturation to: " + SaturationSlider.value + "\n");
        color.saturation = SaturationSlider.value;
        applyFilter();
    }

    private function applyFilter():void
    {
        filter.matrix = color.CalculateFinalFlatArray();
        remoteVideo.filters = [filter];
    }