Вы не можете изменять фактические данные камеры (есть разница между этим и тем, что я описываю далее), но можно легко делать то, что вы хотите, после присоединения объекта камеры к объекту видео и использования разнообразия.фильтров преобразования и подпрограмм из других собственных классов ActionScript, таких как ColorTransform
, DisplayObject.transform.colorTransform
и DisplayObject.filters
, для изменения того, что отображается на экране / в памяти, что, я полагаю, в любом случае, вероятно, вам и нужно.
Чтобы дать вам пример использования в реальном мире, вы можете настроить насыщенность данных камеры, отображаемых в вашем видео, с помощью следующего кода:
/// Desaturate displayed image completely
video.filters = [ new ColorMatrixFilter(saturation_filter_matrix(0)) ];
, где я определил методы как:
static inline var RWGT = 0.3086;
static inline var GWGT = 0.6094;
static inline var BWGT = 0.0820;
static public function brightness_filter_matrix(b: Float)
{
return [ b, 0, 0, 0, 0,
0, b, 0, 0, 0,
0, 0, b, 0, 0,
0, 0, 0, 1, 0 ];
}
static public function saturation_filter_matrix(s: Float)
{
var b = (1 - s) * RWGT;
var a = b + s;
var d = (1 - s) * GWGT;
var e = d + s;
var g = (1 - s) * BWGT;
var i = g + s;
return [ a, d, g, 0, 0,
b, e, g, 0, 0,
b, d, i, 0, 0,
0, 0, 0, 1, 0 ];
}
static public function contrast_filter_matrix(v: Float)
{
v += 1;
var r = v;
var g = v;
var b = v;
return [ r, 0, 0, 0, 128 * (1 - r),
0, g, 0, 0, 128 * (1 - g),
0, 0, b, 0, 128 * (1 - b),
0, 0, 0, 1, 0 ];
}
Я также думаю, что transform.colorTransform
может быть более эффективным при выполнении той же работы, так как я заметил, что фильтры имеют тенденцию облагать Adobe Flash Player налогом от средней до высокой степени, поэтому имейте в виду.
Следствием того факта, что вы не можете изменить фактический вход камеры, является то, что, когда вы публикуете свою камеру по сети (на Fнапример, Media Server), независимо от того, какие эффекты вы используете для отображения данных в своем собственном видеообъекте, сторона, воспроизводящая поток, увидит исходные неизмененные данные.«Обходное решение» - объявить принимающей стороне точные параметры, которые вы хотите, чтобы они применили к своему видеообъекту, воспроизводящему поток.Предполагая, что они применяют эти параметры так же, как вы применяете их к отображаемому изображению с камеры, они будут видеть изображение с вашей камеры так, как вы его видите.
Примечание: Код написан на Haxe,но два языка очень похожи.Необходимо помнить об изменениях (например, явная реклама для Haxe :-) Float
в Haxe - это Number
в ActionScript 3, а Haxe использует вывод типов, который позволяет опускать типы переменных по желанию, позволяяHaxe разберись сам (когда вы добавляете два int
, что вы получаете? На платформе Flash вы всегда получаете также int
.) Также в AS3 нет концепции встраивания (пока?) И т. Д.Вы должны просто удалить синтаксис inline
из кода, вот и все.