是否可以在 Flash 中访问整个图片的颜色?
Is it possible to access an entire picture's color in Flash?
我正在尝试更改 Flash 中图像的亮度。我已将闪光灯转换为位图,并想制作一个按钮来增加或减少整个图像的亮度。有没有办法一次访问图像中的每个像素来执行此操作(使用代码,而不是舞台上的面板)?
使用 ColorMatrixFilter
class,您可以通过对每个颜色通道应用相同的倍增器来调整亮度。
所以像这样(来自source):
image.filters = [makeBrightFilter(50)];
function makeBrightFilter(amount):ColorMatrixFilter {
amount = amount * (255/250);
var m:Array = new Array();
m = m.concat([1, 0, 0, 0, amount]); // red
m = m.concat([0, 1, 0, 0, amount]); // green
m = m.concat([0, 0, 1, 0, amount]); // blue
m = m.concat([0, 0, 0, 1, 0]); // alpha
return new ColorMatrixFilter(m);
}
要将其抽象出来并使其更容易,您可以使用像 Grant Skinner's ColorMatrix class.
这样的库
然后你做这样的事情:
import com.gskinner.geom.ColorMatrix;
import flash.filters.ColorMatrixFilter;
var matrix:ColorMatrix = new ColorMatrix();
matrix.adjustBrightness(50);
image.filters = [new ColorMatrixFilter(matrix)];
我正在尝试更改 Flash 中图像的亮度。我已将闪光灯转换为位图,并想制作一个按钮来增加或减少整个图像的亮度。有没有办法一次访问图像中的每个像素来执行此操作(使用代码,而不是舞台上的面板)?
使用 ColorMatrixFilter
class,您可以通过对每个颜色通道应用相同的倍增器来调整亮度。
所以像这样(来自source):
image.filters = [makeBrightFilter(50)];
function makeBrightFilter(amount):ColorMatrixFilter {
amount = amount * (255/250);
var m:Array = new Array();
m = m.concat([1, 0, 0, 0, amount]); // red
m = m.concat([0, 1, 0, 0, amount]); // green
m = m.concat([0, 0, 1, 0, amount]); // blue
m = m.concat([0, 0, 0, 1, 0]); // alpha
return new ColorMatrixFilter(m);
}
要将其抽象出来并使其更容易,您可以使用像 Grant Skinner's ColorMatrix class.
这样的库然后你做这样的事情:
import com.gskinner.geom.ColorMatrix;
import flash.filters.ColorMatrixFilter;
var matrix:ColorMatrix = new ColorMatrix();
matrix.adjustBrightness(50);
image.filters = [new ColorMatrixFilter(matrix)];