在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類常用的屬性
19.1.2 BitmapData類
BitmapData類用來處理Bitmap對象的數(shù)據(jù)。BitmapData類可以在程序運行時,任意調整位圖的大小、透明度、像素等。BitmapData類常用的屬性如表19.2所示,常用的方法如表19.3所示。
表19.2 BitmapData類常用的屬性
表19.3 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()。
1.getPixel()方法
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()方法處理單個像素
2.getPixel32()方法
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()方法處理單個像素
3.setPixel()方法
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()方法處理單個像素
4.setPixel32()方法
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()。
1.getPixels()方法
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()方法處理多個像素
2.setPixels()方法
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 |
|