套件 | flash.display |
類別 | public class Bitmap |
繼承 | Bitmap DisplayObject EventDispatcher Object |
子類別 | FlexBitmap |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Bitmap()
建構函式來建立這些影像。
Bitmap()
建構函式可讓您建立一個包含 BitmapData 物件參照的 Bitmap 物件。 在您建立了 Bitmap 物件之後,可以使用上層 DisplayObjectContainer 實體的 addChild()
或 addChildAt()
方法,將點陣圖放置到顯示清單中。
Bitmap 物件通常會將其 BitmapData 參照與其它數個 Bitmap 物件共用 (與是否具有轉移或旋轉屬性無關)。 由於您可以建立多個參照到相同 BitmapData 物件的 Bitmap 物件,多個顯示物件就可以使用相同的複雜 BitmapData 物件,但是不會因為每個顯示物件實體需要重複使用同一個 BitmapData 物件而產生對記憶體的工作負荷。
有兩種方法,分別都可以讓您使用 Bitmap 物件將 BitmapData 物件繪製到螢幕上: 使用向量描繪器做為填色點陣圖形狀,或使用更快速的像素複製常式。 基本上,像素複製常式執行的速度比向量描繪器快,但是前提是 Bitmap 物件必須符合特定條件才能使用這個方法:
- Bitmap 物件無法套用延伸、旋轉與傾斜。
- Bitmap 物件無法套用顏色轉換。
- Bitmap 物件無法套用混合模式。
- 無法透過遮色片圖層或
setMask()
方法來完成剪裁。 - 影像本身不可以是遮色片。
- 目標座標必須位於整個像素邊界上。
如果您從 Loader 物件 (用來載入影像) 以外的網域載入 Bitmap 物件,而且找不到允許存取 Loader 物件網域的 URL 原則檔案,則該網域裡的指令碼將無法存取 Bitmap 物件或其屬性與方法。如需詳細資訊,請參閱「Flash Player 開發人員中心」主題:「安全性」。
注意: Bitmap 類別不是 InteractiveObject 類別的子類別,因此無法傳送滑鼠事件。 然而,您可以使用包含了 Bitmap 物件的顯示物件容器之 addEventListener()
方法。
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
accessibilityProperties : AccessibilityProperties
此顯示物件的目前輔助功能選項。 | DisplayObject | ||
alpha : Number
指出所指定物件的 Alpha 透明度值。 | DisplayObject | ||
bitmapData : BitmapData
參照中的 BitmapData 物件。 | Bitmap | ||
blendMode : String
來自 BlendMode 類別的值,會指定要使用何種混合模式。 | DisplayObject | ||
blendShader : Shader [唯寫]
設定用來混合前景和背景的著色器。 | DisplayObject | ||
cacheAsBitmap : Boolean
如果設定為 true,Flash 執行階段會快取顯示物件的內部點陣圖表示法。 | DisplayObject | ||
cacheAsBitmapMatrix : Matrix
如果為非 null,當 cacheAsBitmap 設定為 true 時,這個 Matrix 物件會定義顯示物件的顯示方法。 | DisplayObject | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
filters : Array
索引的陣列,其中包含目前和顯示物件相關的每個濾鏡物件。 | DisplayObject | ||
height : Number
會指出顯示物件的高度,以像素為單位。 | DisplayObject | ||
loaderInfo : LoaderInfo [唯讀]
會傳回 LoaderInfo 物件,其中包含關於載入此顯示物件所屬之檔案的資訊。 | DisplayObject | ||
mask : DisplayObject
呼叫之顯示物件會以指定的 mask 物件遮蓋。 | DisplayObject | ||
metaData : Object
如果中繼資料是透過 PlaceObject4 標籤與 SWF 檔案中的這個 DisplayObject 實體一同儲存,則會取得 DisplayObject 實體的中繼資料物件。 | DisplayObject | ||
mouseX : Number [唯讀]
指出滑鼠或使用者輸入裝置位置的 x 座標,以像素為單位。 | DisplayObject | ||
mouseY : Number [唯讀]
指出滑鼠或使用者輸入裝置位置的 y 座標,以像素為單位。 | DisplayObject | ||
name : String
指出 DisplayObject 的實體名稱。 | DisplayObject | ||
opaqueBackground : Object
會指定顯示物件是否不透明,並具有特定背景顏色。 | DisplayObject | ||
parent : DisplayObjectContainer [唯讀]
指出包含此顯示物件的 DisplayObjectContainer 物件。 | DisplayObject | ||
pixelSnapping : String
控制 Bitmap 物件是否貼齊最近的像素。 | Bitmap | ||
root : DisplayObject [唯讀]
對載入之 SWF 檔案的顯示物件而言,root 屬性就是該 SWF 檔案所呈現之顯示清單樹狀結構部分的最上層顯示物件。 | DisplayObject | ||
rotation : Number
指出 DisplayObject 實體的旋轉度數 (從該物件原本方向算起)。 | DisplayObject | ||
rotationX : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 x 軸旋轉 (以度數為單位)。 | DisplayObject | ||
rotationY : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 y 軸旋轉 (以度數為單位)。 | DisplayObject | ||
rotationZ : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 z 軸旋轉 (以度數為單位)。 | DisplayObject | ||
scale9Grid : Rectangle
目前產生效用的縮放格線。 | DisplayObject | ||
scaleX : Number
指出從註冊點套用的物件水平縮放 (百分比)。 | DisplayObject | ||
scaleY : Number
指出從物件註冊點套用的物件垂直縮放 (百分比)。 | DisplayObject | ||
scaleZ : Number
指出從物件註冊點套用的物件深度縮放 (百分比)。 | DisplayObject | ||
scrollRect : Rectangle
顯示物件的捲動矩形範圍。 | DisplayObject | ||
smoothing : Boolean
控制點陣圖是否在縮放時平滑化處理。 | Bitmap | ||
stage : Stage [唯讀]
顯示物件的「舞台」。 | DisplayObject | ||
transform : flash.geom:Transform
這是一個物件,具有和顯示物件的矩陣、顏色轉換和像素邊界有關的屬性。 | DisplayObject | ||
visible : Boolean
不管是否看得見顯示物件。 | DisplayObject | ||
width : Number
會指出顯示物件的寬度,以像素為單位。 | DisplayObject | ||
x : Number
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 x 座標。 | DisplayObject | ||
y : Number
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 y 座標。 | DisplayObject | ||
z : Number
表示 DisplayObject 實體相對於 3D 父輩容器的 z 座標位置 (沿著 z 軸)。 | DisplayObject |
方法 | 定義自 | ||
---|---|---|---|
初始化 Bitmap 物件,以便參照指定的 BitmapData 物件。 | Bitmap | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
傳回可定義顯示物件區域 (相對於 targetCoordinateSpace 物件的座標系統) 的矩形。 | DisplayObject | ||
根據 targetCoordinateSpace 參數所定義的座標系統,並排除形狀上的任何筆畫,傳回可定義顯示物件邊界的矩形。 | DisplayObject | ||
將 point 物件從「舞台」(全域) 座標轉換成顯示物件的 (區域) 座標。 | DisplayObject | ||
將二維點從「舞台」(全域) 座標轉換為三維顯示物件的 (區域) 座標。 | DisplayObject | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
評估顯示物件的範圍框,看它是否與 obj 顯示物件的範圍框重疊或相交。 | DisplayObject | ||
評估顯示物件,看它是否與 x 和 y 參數所指定的點重疊或相交。 | DisplayObject | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
將三維顯示物件的 (區域) 座標的三維點轉換為「舞台」(全域) 座標中的二維點。 | DisplayObject | ||
將 point 物件從顯示物件的 (區域) 座標轉換成「舞台」(全域) 座標。 | DisplayObject | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
bitmapData | 屬性 |
bitmapData:BitmapData
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
參照中的 BitmapData 物件。
實作
public function get bitmapData():BitmapData
public function set bitmapData(value:BitmapData):void
pixelSnapping | 屬性 |
pixelSnapping:String
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
控制 Bitmap 物件是否貼齊最近的像素。 PixelSnapping 類別包括可能的值:
PixelSnapping.NEVER
-- 不會發生像素貼齊。PixelSnapping.ALWAYS
-- 影像永遠會貼齊最近的像素 (與變形無關)。PixelSnapping.AUTO
-- 如果影像沒有使用旋轉或傾斜效果,而使用了 99.9% 到 100.1% 的縮放比例因素來繪製,就會貼齊最近的像素。 如果滿足這些條件,則點陣圖影像將以 100% 縮放比例繪製,並貼齊最近的像素。 在影像內部,此值將可允許影像使用向量描繪器以最快的速度來繪製影像。
實作
public function get pixelSnapping():String
public function set pixelSnapping(value:String):void
smoothing | 屬性 |
Bitmap | () | 建構函式 |
public function Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false)
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
初始化 Bitmap 物件,以便參照指定的 BitmapData 物件。
參數bitmapData:BitmapData (default = null ) — 參照中的 BitmapData 物件。
| |||
pixelSnapping:String (default = "auto ") — 不管 Bitmap 物件是否貼齊最近的像素。
| |||
smoothing:Boolean (default = false ) — 不管點陣圖是否在縮放時平滑化處理。 例如,下例範例說明相同的點陣圖以 3 的因素縮放,其中 smoothing 設為 false (左側) 與 true (右側):
|
範例 ( 如何使用本範例 )
const IMAGE_URL:String = "http://www.helpexamples.com/flash/images/logo.png"; var ldr:Loader = new Loader(); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, ldr_complete); ldr.load(new URLRequest(IMAGE_URL)); var bitmap1:Bitmap; var bitmap2:Bitmap; var bitmap3:Bitmap; var bitmap4:Bitmap; function ldr_complete(evt:Event):void { var bmp:Bitmap = ldr.content as Bitmap; bitmap1 = new Bitmap(bmp.bitmapData); bitmap1.x = 100; bitmap1.y = 100; bitmap1.rotation = 0; addChild(bitmap1); bitmap2 = new Bitmap(bmp.bitmapData); bitmap2.x = 200; bitmap2.y = 100; bitmap2.rotation = 90; addChild(bitmap2); bitmap3 = new Bitmap(bmp.bitmapData); bitmap3.x = 300; bitmap3.y = 100; bitmap3.rotation = 180; addChild(bitmap3); bitmap4 = new Bitmap(bmp.bitmapData); bitmap4.x = 400; bitmap4.y = 100; bitmap4.rotation = 270; addChild(bitmap4); }
threshold()
方法將新顏色套用至已經通過測試的像素。 您可以執行下列步驟來完成這項工作:
- 會建立
url
屬性,此屬性將為影像檔的位置與名稱 - 類別建構函式會呼叫
configureAssets()
方法,而此方法會反過來呼叫completeHandler()
方法。 configureAssets()
會建立 Loader 物件,並接著將事件偵聽程式實體化,此事件偵聽程式會在completeHandler()
完成影像處理時傳送。- 接著,
buildChild()
方法會建立新的 URLRequest 物件實體request
,並傳遞url
以便告知檔案名稱與位置。 request
物件會接著傳遞至loader.load()
方法,它會透過顯示物件將影像載入至記憶體中。- 影像接著會被放置到顯示清單中,並以提示的方式在螢幕上 x = 0, y = 0 的座標位置顯示該影像。
- 此
completeHandler()
方法接著會執行下列作業:- 建立第二個 Loader 物件,並建立以此 Loader 物件初始化的 Bitmap 物件。
- 建立第二個點陣圖物件,
duplicate
,此物件會反過來呼叫duplicateImage()
方法,以建立原始影像的副本。 - 建立 BitmapData 物件並指定給
duplicate
物件的 BitmapData 物件。 - 建立新的 Rectangle 物件,並使用與原始影像相同的座標、寬度與高度。
- 建立新的 Point 物件,並將其座標預設為 x = 0, y = 0。
- 建立下列變數:
operation
:當臨界值 >= 原始值時,會套用新的顏色。threshold
:每個像素都會針對其進行比較的值,這個值會設定為 Alpha 值為 0xCC 的淺灰色。color
:通過臨界測試,且為像素所設定的顏色 (在此範例中則是純黃色)。mask
:設為完全對比的顏色 (透明藍色)。copySource
:設定為 false,指出在臨界值不通過的事件中,不會複製像素值。 由於影像會重製,並且只會變更通過臨界測試的像素,所以這個值並不具意義。
- 使用上面的變數來呼叫
threshold()
方法。 產生的臨界值方程式如下:if (current pixel Value & 0x000000FF) >= (0xCCCCCCCC & 0x000000FF) then set pixel to 0xFFFFFF00
。
注意:
- 在編譯 SWF 檔時,您必須將「本機播放安全性」設定為「只存取本機檔案」。
- 在此範例中,您需要將名為 Image.gif 的檔案放在與 SWF 檔案所處的相同目錄中。
- 我們建議您使用寬度最多為 80 像素的影像。
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.geom.Point; import flash.geom.Rectangle; import flash.net.URLRequest; public class BitmapExample extends Sprite { private var url:String = "Image.gif"; private var size:uint = 80; public function BitmapExample() { configureAssets(); } private function configureAssets():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var request:URLRequest = new URLRequest(url); loader.x = size * numChildren; loader.load(request); addChild(loader); } private function duplicateImage(original:Bitmap):Bitmap { var image:Bitmap = new Bitmap(original.bitmapData.clone()); image.x = size * numChildren; addChild(image); return image; } private function completeHandler(event:Event):void { var loader:Loader = Loader(event.target.loader); var image:Bitmap = Bitmap(loader.content); var duplicate:Bitmap = duplicateImage(image); var bitmapData:BitmapData = duplicate.bitmapData; var sourceRect:Rectangle = new Rectangle(0, 0, bitmapData.width, bitmapData.height); var destPoint:Point = new Point(); var operation:String = ">="; var threshold:uint = 0xCCCCCCCC; var color:uint = 0xFFFFFF00; var mask:uint = 0x000000FF; var copySource:Boolean = true; bitmapData.threshold(bitmapData, sourceRect, destPoint, operation, threshold, color, mask, copySource); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 03:47 PM Z