小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

BitmapData 詳解(一)(轉)

 x小登 2016-10-23
在ActionScript 3.0中,可以創(chuàng)建位圖圖像,還可以把外部的位圖圖像加載到Flash Player中。使用位圖類,可以處理位圖的像素和雜點。通過濾鏡類,還可以增加位圖的各種濾鏡效果。
19.1  位圖類
常用的有關位圖的類有三個:Bitmap類、BitmapData類和BitmapDataChannel類。Bitmap類用來顯示位圖圖像,BitmapData類用來處理位圖,BitmapDataChannel類是個枚舉值,表示使用的通道。
 19.1.1  Bitmap
Bitmap類表示位圖圖像的顯示對象??梢允褂肂itmap類的構造函數(shù)創(chuàng)建圖像,也可以使用Loader類加載外部圖像。Bitmap類常用的屬性如表19.1所示。
表19.1  Bitmap類常用的屬性
   
   
bitmapData
被引用的BitmapData對象
pixelSnapping
控制Bitmap對象是否貼緊至最近的像素
smoothing
控制在縮放時是否對位圖進行平滑處理
 19.1.2  BitmapData
BitmapData類用來處理Bitmap對象的數(shù)據(jù)。BitmapData類可以在程序運行時,任意調整位圖的大小、透明度、像素等。BitmapData類常用的屬性如表19.2所示,常用的方法如表19.3所示。
表19.2  BitmapData類常用的屬性
   
   
height
位圖圖像的高度
rect
定義位圖圖像大小和位置的矩形
transparent
定義位圖圖像是否支持每個像素具有不同的透明度
width
位圖圖像的寬度
表19.3  BitmapData對象常用的方法
   
   
applyFilter
取得一個源圖像和一個濾鏡對象,并生成過濾的圖像
clone
返回一個新的BitmapData對象,它是對原始實例的克隆,包含與原始實例所含位圖完全相同的副本
colorTransform
使用ColorTransform對象調整位圖圖像的指定區(qū)域中的顏色值
compare
比較兩個BitmapData對象
copyChannel
將數(shù)據(jù)從另一個BitmapData對象或當前BitmapData對象的一個通道傳輸?shù)疆斍?/sup>BitmapData對象的某個通道中
copyPixels
為沒有拉伸、旋轉或色彩效果的圖像之間的像素處理提供一個快速例程
dispose
釋放用來存儲BitmapData對象的內存
draw
使用Flash Player矢量渲染器在位圖圖像上繪制source顯示對象
fillRect
使用指定的ARGB顏色填充一個矩形像素區(qū)域
floodFill
對圖像執(zhí)行傾倒填充操作,從(x, y)坐標開始,填充一種特定的顏色
generateFilterRect
已知BitmapData對象、源矩形和濾鏡對象,確定applyFilter()方法調用所影響的目標矩形
getColorBoundsRect
確定矩形區(qū)域是將位圖圖像中指定顏色的所有像素完全包括起來(如果將findColor參數(shù)設置為true),還是將不包括指定顏色的所有像素完全包括起來(如果將findColor參數(shù)設置為false
getPixel
返回一個整數(shù),它表示BitmapData對象中在特定點(x, y 處的RGB 像素值
getPixel32
返回一個ARGB顏色值,它包含Alpha通道數(shù)據(jù)和RGB數(shù)據(jù)
getPixels
從像素數(shù)據(jù)的矩形區(qū)域生成一個字節(jié)數(shù)組
hitTest
在一個位圖圖像與一個點、矩形或其他位圖圖像之間執(zhí)行像素級的點擊檢測 
lock
鎖定圖像,以使引用BitmapData對象的任何對象(如Bitmap對象)在此BitmapData對象更改時不會更新
merge
對每個通道執(zhí)行從源圖像向目標圖像的混合
noise
使用表示隨機雜點的像素填充圖像
paletteMap
重新映射一個具有最多四組調色板數(shù)據(jù)(每個通道一組)的圖像中的顏色通道值
perlinNoise
生成Perlin雜點圖像
pixelDissolve
執(zhí)行源圖像到目標圖像的像素溶解,或使用同一圖像執(zhí)行像素溶解
scroll
按某一(x, y)像素量滾動圖像
setPixel
設置BitmapData對象的單個像素
setPixel32
設置BitmapData對象單個像素的顏色和Alpha透明度值
setPixels
將字節(jié)數(shù)組轉換為像素數(shù)據(jù)的矩形區(qū)域
threshold
根據(jù)指定的閾值測試圖像中的像素值,并將通過測試的像素設置為新的顏色值
unlock
解除鎖定圖像,以使引用BitmapData對象的任何對象(如Bitmap對象)在此BitmapData對象更改時更新
 19.1.3  創(chuàng)建位圖類
通常情況下,Bitmap類和BitmapData類是結合在一起使用的。Bitmap類的構造函數(shù)的語法格式如下所示:
Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false)
其各個參數(shù)的說明如下。
—  bitmapData:被引用的BitmapData對象。
—  pixelSnapping:默認值為auto,表示Bitmap對象是否貼緊至最近的像素。
—  smoothing:默認值為false,表示在縮放時是否對位圖進行平滑處理。
BitmapData類的構造函數(shù)的語法格式如下所示:
BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
其各個參數(shù)的說明如下。
—  width:位圖圖像的寬度,以像素為單位。
—  height:位圖圖像的高度,以像素為單位。
—  transparent:指定位圖圖像是否支持每個像素具有不同的透明度。
—  fillColor:用于填充位圖圖像區(qū)域的32位ARGB顏色值。
下面的示例使用兩個位圖類,創(chuàng)建一個矩形,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample(
)
        {
            // 創(chuàng)建BitmapData類
            var bitmap:BitmapData = new BitmapData(400, 300, true, 0x500066FF);
            // 創(chuàng)建Bitmap類
            var image:Bitmap = new Bitmap(bitmap);
            // 設置顯示位置
            image.x = 90;
            image.y = 50;
            // 增加到舞臺
            addChild(image);
        }
    }
}
編譯代碼并運行,結果如圖19.1所示。
圖19.1  創(chuàng)建位圖類
 19.1.4  加載外部圖像
除了在內部創(chuàng)建位圖之外,還可以加載外部的圖像到位圖中。加載外部的圖像,需要用到Loader對象。通過Loader對象的load()方法,可以加載外部的URL。下面的示例使用Loader對象,加載外部圖像到位圖中,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapExample extends Sprite
    {
        private var loader:Loader = new Loader();
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 偵聽數(shù)據(jù)加載
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
            // 外部圖像URL
            loader.load(new URLRequest("Bitmap.jpg"));
        }
        /********************
         * 加載外部圖像到位圖
         * */
        public function onComplete(event:Event):void
        {
            // 創(chuàng)建位圖
            var image:Bitmap = Bitmap(loader.content);
            var bitmap:BitmapData = image.bitmapData;
            addChild(image);
            // 設置
            image.x = 20;
            image.y = 30;
        }
    }
}
編譯代碼并運行,結果如圖19.2所示。
圖19.2  加載外部圖像
19.2  像素的處理
在BitmapData類中,包含了一組用于像素處理的方法。使用這些方法可以處理單個像素,還可以處理像素數(shù)組。
 19.2.1  處理單個像素
處理單個像素用到的方法包括:getPixel()、getPixel32()、setPixel()和setPixel32()。
1getPixel()方法
getPixel()方法表示在指定的點獲取位圖的RGB像素。此方法有兩個參數(shù),分別是指定點的橫坐標和縱坐標。其語法格式如下所示:
getPixel(x:int, y:int):uint
參數(shù)的詳細說明如下。
—  x:指定點的橫坐標。
—  y:指定點的縱坐標。
下面的示例使用getPixel()方法獲取點(1,1)的RGB像素值,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 創(chuàng)建BitmapData類
            var bitmap:BitmapData = new BitmapData(400, 300, false, 0xCC66FF);
            // 設置像素
            var i:uint = bitmap.getPixel(1, 1);
            // 輸出獲取的像素
            trace(i.toString(16));
        }
    }
}
編譯代碼并運行,輸出的效果如圖19.3所示。
圖19.3  使用getPixel()方法處理單個像素
2getPixel32()方法
getPixel32()方法與getPixel()方法類似,區(qū)別是getPixel32()方法返回一個ARGB的像素值。其中返回值包含了透明度的值。其語法格式如下所示:
getPixel32(x:int, y:int):uint
參數(shù)的詳細說明如下。
—  x:指定點的橫坐標。
—  y:指定點的縱坐標。
下面的示例使用getPixel32()方法,返回指定點的像素值,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 創(chuàng)建BitmapData類
            var bitmap:BitmapData = new BitmapData(400, 300, true, 0x50CC66FF);
            // 設置像素
            var i:uint = bitmap.getPixel32(1, 1);
            // 輸出獲取的像素
            trace(i.toString(16));
        }
    }
}
編譯代碼并運行,輸出的結果如圖19.4所示。
圖19.4  使用getPixel32()方法處理單個像素
3setPixel()方法
setPixel()方法用來設置BitmapData對象的單個像素。此方法有三個參數(shù),前兩個參數(shù)表示要設置單個像素的點,第三個參數(shù)color表示生成的像素RGB顏色。其語法格式如下所示:
setPixel(x:int, y:int, color:uint):void
參數(shù)的詳細說明如下所示:
—  x:像素值會更改的像素的x位置。
—  y:像素值會更改的像素的y位置。
—  color:生成的像素的RGB顏色。
下面的示例使用setPixel()方法,循環(huán)設置某些點的像素的RGB顏色,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 創(chuàng)建BitmapData類
            var bitmap:BitmapData = new BitmapData(400, 300, false, 0x000066FF);
            // 設置像素
            for(var i:uint = 0; i < 300; i++)
            {
                bitmap.setPixel(20, i, 0xFFFFFF);
                bitmap.setPixel(80, i, 0x000000);
                bitmap.setPixel(160, i, 0x00CC00);
            }
            // 創(chuàng)建Bitmap類
            var image:Bitmap = new Bitmap(bitmap);
            // 設置顯示位置
            image.x = 90;
            image.y = 50;
            // 增加到舞臺
            addChild(image);
        }
    }
}
編譯代碼并運行,結果如圖19.5所示。
圖19.5  setPixel()方法處理單個像素
4setPixel32()方法
setPixel32()方法與setPixel()方法類似,不同的是,setPixel32()方法是設置ARGB(其中A表示透明度)的像素值。此方法的前兩個參數(shù)與setPixel()方法相同,最后一個參數(shù)表示生成的像素的ARGB顏色。其語法格式如下所示:
setPixel32(x:int, y:int, color:uint):void
參數(shù)的詳細說明如下所示:
—  x:像素值會更改的像素的x位置。
—  y:像素值會更改的像素的y位置。
—  color:生成的像素的ARGB顏色。
下面的示例使用setPixel32()方法,循環(huán)設置某些點的像素值,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 創(chuàng)建BitmapData類
            var bitmap:BitmapData = new BitmapData(400, 300, true, 0x700066FF);
            // 設置像素
            for(var i:uint = 0; i < 300; i++)
            {
                bitmap.setPixel32(20, i, 0x20FF0000);
                bitmap.setPixel32(21, i, 0x40FF0000);
                bitmap.setPixel32(22, i, 0x60FF0000);
                bitmap.setPixel32(23, i, 0x80FF0000);
                bitmap.setPixel32(24, i, 0x00FF0000);
            }
            // 創(chuàng)建Bitmap類
            var image:Bitmap = new Bitmap(bitmap);
            // 設置顯示位置
            image.x = 90;
            image.y = 50;
            // 增加到舞臺
            addChild(image);
        }
    }
}
編譯代碼并運行,結果如圖19.6所示。
圖19.6  使用setPixel32()方法處理單個像素
 19.2.2  處理多個像素
ActionScript 3.0除了能處理單個像素外,還能處理多個像素。處理多個像素,一般是與字節(jié)數(shù)組有關的,把字節(jié)數(shù)組與像素的矩形區(qū)域相互轉換。與處理多個元素有關的方法有兩個:getPixels()和setPixels()。
1getPixels()方法
getPixels()方法將像素的矩形區(qū)域轉換為一個字節(jié)數(shù)組并返回。getPixels()方法有一個參數(shù),表示當前BitmapData對象中的一個矩形區(qū)域。其語法格式如下所示:
getPixels(rect:Rectangle):ByteArray
下面的示例使用getPixels()方法獲取矩形區(qū)域的像素值,代碼如下所示:
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.utils.ByteArray;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 創(chuàng)建BitmapData類
            var bitmap:BitmapData = new BitmapData(400, 300, true, 0x700066FF);
            var bounds:Rectangle = new Rectangle(0, 0,bitmap.width, bitmap.height);
            var pixels:ByteArray = bitmap.getPixels(bounds);
            trace("像素數(shù)組的長度" + pixels.length);
            trace("以下是取幾個元素的值:");
            trace(pixels[0]);
            trace(pixels[4]);
            trace(pixels[6]);
            trace(pixels[10]);
        }
    }
}
編譯代碼并運行,輸出的結果如圖19.7所示。
圖19.7  使用getPixels()方法處理多個像素
2setPixels()方法
setPixels()方法將字節(jié)數(shù)組轉換為像素的矩形區(qū)域。其語法格式如下所示:
 setPixels(rect:Rectangle, inputByteArray:ByteArray):void
參數(shù)說明如下。
—  rect:指定BitmapData對象的矩形區(qū)域。
—  inputByteArray:一個字節(jié)數(shù)組對象,由要在矩形區(qū)域中使用的32位未經(jīng)過相乘的像素值組成。
package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.utils.ByteArray;
    public class BitmapExample extends Sprite
    {
        /********************
         * 構造函數(shù)
         * */
        public function BitmapExample()
        {
            // 創(chuàng)建BitmapData對象
            var bmd1:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC);
            var bmd2:BitmapData = new BitmapData(200, 200, true, 0xFFFF0000);
            // 創(chuàng)建獲取像素的矩形區(qū)域
            var rect:Rectangle = new Rectangle(20, 20, 150, 150);
            var bytes:ByteArray = bmd1.getPixels(rect);
            // 設置像素
            bytes.position = 0;
            bmd2.setPixels(rect, bytes);
            // 創(chuàng)建Bitmap對象
            var bm1:Bitmap = new Bitmap(bmd1);
            addChild(bm1);
            var bm2:Bitmap = new Bitmap(bmd2);
            addChild(bm2);
            // 設置位置
            bm1.x = 50;
            bm1.y = 100;
            bm2.x = 260;
            bm2.y = 100;
        }
    }
}
編譯代碼并運行,結果如圖19.8所示。

http://leo398.blog.51cto.com/658992/341950
posted on 2011-06-10 17:39 小果子 閱讀(5609) 評論(0)  編輯 收藏 引用 所屬分類: Flex

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多