AS3 - 调整图像颜色
Posted
技术标签:
【中文标题】AS3 - 调整图像颜色【英文标题】:AS3 - Adjust image colors 【发布时间】:2012-04-27 16:20:12 【问题描述】:我正在通过下面的函数调整图像颜色。问题是,如果我需要将 colorFilter 值切换为 0 它不起作用但是如果我输入 0.1 而不是 0 有效。 如果没有这种解决方法,如何使它工作?
import fl.motion.AdjustColor;
import flash.filters.ColorMatrixFilter;
var colorFilter:AdjustColor = new AdjustColor();
var mColorMatrix:ColorMatrixFilter;
var mMatrix:Array = [];
var MC:MovieClip = new MovieClip();
function adjustColors():void
colorFilter.hue = 50;
colorFilter.saturation = 50;
colorFilter.brightness = 50;
colorFilter.contrast = 12;
mMatrix = colorFilter.CalculateFinalFlatArray();
mColorMatrix = new ColorMatrixFilter(mMatrix);
MC.filters = [mColorMatrix];
【问题讨论】:
“colorFilter 值”是什么意思? 我的意思是:colorFilter.hue / colorFilter.saturation / colorFilter.brightness / colorFilter.contrast
【参考方案1】:
我通过向 adjustColors() 添加一个参数并调用它两次来测试这一点,我看到了同样的问题。我认为这只是一个忽略零值的错误。
这并不是更好的解决方法,但如果您每次都创建一个新的 AdjustColor,它应该可以正常工作:
import fl.motion.AdjustColor;
import flash.filters.ColorMatrixFilter;
var colorFilter:AdjustColor = new AdjustColor();
var mColorMatrix:ColorMatrixFilter;
var mMatrix:Array = [];
var MC:MovieClip = new MovieClip();
function adjustColors():void
colorFilter = new AdjustColor();
colorFilter.hue = 50;
colorFilter.saturation = 50;
colorFilter.brightness = 50;
colorFilter.contrast = 12;
mMatrix = colorFilter.CalculateFinalFlatArray();
mColorMatrix = new ColorMatrixFilter(mMatrix);
MC.filters = [mColorMatrix];
【讨论】:
【参考方案2】:这是我的解决方法供参考: 设置每个属性时只需使用逻辑 OR 分配。 这样,如果值为 0,它将评估为 false,而将分配 .1:
var colorMat:ColorMatrixFilter = new ColorMatrixFilter();
var colorAdjust:AdjustColor = new AdjustColor();
const colorsAdj:Array =
[
// BRIGHTNESS, CONTRAST, SATURATION, HUE
[-20,0,20,-50],
[0,0,0,0],
[0,0,0,17]
];
function setColorMat(colorID:int):void
colorAdjust.brightness = colorsAdj[colorID][0] ||= .1;
colorAdjust.contrast = colorsAdj[colorID][1] ||= .1;
colorAdjust.saturation = colorsAdj[colorID][2] ||= .1;
colorAdjust.hue = colorsAdj[colorID][3] ||= .1;
colorMat.matrix = colorAdjust.CalculateFinalFlatArray();
这样你就可以避免每次都重新创建一个新的 ColorMatrixFilter,以防它真的改变了一些东西...... 而且你保持了一个干净整洁的数组...... ;-)
【讨论】:
以上是关于AS3 - 调整图像颜色的主要内容,如果未能解决你的问题,请参考以下文章