Инверсные черно-белые / монохромные растровые изображения в AS3 - PullRequest
1 голос
/ 23 сентября 2011

Мне интересно, есть ли хорошие способы инвертирования черно-белых / монохромных растровых данных в AS3, которые не предполагают прохождение и настройку каждого пикселя за пикселем?

Ответы [ 4 ]

10 голосов
/ 23 сентября 2011

Посмотрите вверх bitmapData.colorTransform() [ документы ] и класс ColorTransform [ документы ]

Возможно, вы захотите применить что-то вроде:

var bd:BitmapData;
var invertTransform:ColorTransform = new ColorTransform(-1,-1,-1,1,255,255,255,0)
db.colorTransform(db.rect, invertTransform)

, который умножит каждый пиксель на -1, а затем добавит 255. Таким образом, 255 станет 0, а 0 станет 255.

8 голосов
/ 24 сентября 2011

Есть и другое решение.Каждый экранный объект имеет свойство blendMode и может изменять цвет фоновых объектов в соответствии с этим режимом наложения.Все, что вам нужно сделать, - это закрыть растровый объект другим экранным объектом и установить его режим наложения.Он работает очень похоже на маски, но применяется к цвету, а не к форме.

colorCoverObject.blendMode = BlendMode.INVERT;

colorCoverObject должен быть прозрачным объектом.

1 голос
/ 20 февраля 2015

Для ActionScript 2.0:

colorCoverObject.blendMode="invert"; 

Видеоролики за дисплеем ColorCoverObject в инвертированном цвете.

0 голосов
/ 30 ноября 2016

для монохромный эффект Я только что создал учебник ниже

превью монохромного эффекта:

enter image description here


Требуется:

  1. понимание растровых и растровых данных

что такое порог

Эта настройка принимает все пиксели изображения и ... подталкивает их к чистому белому или чистому черному

что мы должны сделать

Вот Live Demo этого примера с некоторыми дополнительными изменяется как использование пользовательского интерфейса для изменения порогового уровня во время выполнения.

enter image description here

порог в сценарии действия 3 из официальной документации as3

Проверяет значения пикселей в изображении относительно указанного порога и устанавливает пикселей, которые проходят тест на новые значения цвета. Используя порог () метод, вы можете выделить и заменить цветовые диапазоны в изображении и выполнять другие логические операции над пикселями изображения.

Логика проверки метода threshold () выглядит следующим образом:

  1. Если ((pixelValue & mask) операция (порог и маска)), то установите пиксель в цвет;
  2. В противном случае, если copySource == true, установите для пикселя значение соответствующее значение пикселя из sourceBitmap.

Я только что прокомментировал следующий код с точно такими же именами, что и приведенное описание.

import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.geom.Point;

var bmd:BitmapData = new wildcat(); // instantied a bitmapdata from library a wildcat
var bmp:Bitmap = new Bitmap(bmd); // our display object to previewing bitmapdata on stage
addChild(bmp);
monochrome(bmd); // invoking threshold function

/**
    @param bmd, input bitmapData that should be monochromed
*/
function monochrome(bmd:BitmapData):void {
    var bmd_copy:BitmapData = bmd.clone(); // holding a pure copy of bitmapdata for comparation steps
    // this is our "threshold" in description above, source pixels will be compared with this value
    var level:uint = 0xFFAAAAAA; // #AARRGGBB. in this case i used RGB(170,170,170) with an alpha of 1. its not median but standard
    // A rectangle that defines the area of the source image to use as input.
    var rect:Rectangle = new Rectangle(0,0,bmd.width,bmd.height);
    // The point within the destination image (the current BitmapData instance) that corresponds to the upper-left corner of the source rectangle.
    var dest:Point = new Point();
    // thresholding will be done in two section
    // the last argument is "mask", which exists in both sides of comparation
    // first, modifying pixels which passed comparation and setting them all with "color" white (0xFFFFFFFF)
    bmd.bitmapData.threshold(bmd_copy, rect, dest, ">", level, 0xFFFFFFFF, 0xFFFFFFFF);
    // then, remaining pixels and make them all with "color" black (0xFF000000)
    bmd.bitmapData.threshold(bmd_copy, rect, dest, "<=", level, 0xFF000000, 0xFFFFFFFF);
    // Note: as we have no alpha channel in our default BitmapData (pixelValue), we left it to its full value, a white mask (0xffffffff)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...