ActionScript 3
Manipulacja i filtrowanie bitmap
Szukaj…
Wprowadzenie
W tym temacie możesz dowiedzieć się trochę na temat manipulowania bitmapdanymi i przetwarzania wizualnego, pracy z pikselami i rozpoczęcia korzystania z filtrów efektów.
Efekt progowy (monochromatyczny)
wymagany:
- rozumienie danych bitmapowych i bitmapowych
co to jest próg
Ta regulacja bierze wszystkie piksele na obrazie i… popycha je do czystej bieli lub czystej czerni
co mamy do zrobienia
tutaj jest Live Demo tego przykładu z kilkoma dodatkowymi zmianami, takimi jak użycie interfejsu użytkownika do zmiany poziomu progu w czasie wykonywania.
próg w skrypcie akcji 3 z oficjalnej dokumentacji as3
Testuje wartości pikseli na obrazie względem określonego progu i ustawia piksele, które przechodzą test, na nowe wartości kolorów. Za pomocą metody próg () można izolować i zamieniać zakresy kolorów na obrazie oraz wykonywać inne operacje logiczne na pikselach obrazu.
Logika testów metody progowej () jest następująca:
- Jeśli operacja ((pixelValue i maska) (próg i maska)), ustaw piksel na kolor;
- W przeciwnym razie, jeśli copySource == true, ustaw piksel na odpowiadającą mu wartość z sourceBitmap.
właśnie skomentowałem następujący kod z dokładnie nazwami jak cytowany opis.
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)
}