`

播放位图

阅读更多

 

package com.xlands.avatar
{

	
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.URLRequest;
	import flash.utils.Timer;
	
	import org.aswing.AsWingManager;
	import org.aswing.JFrame;
	
	public class BitmapDataExample extends Sprite {
		
		private var url:String = "img.png";
		
		private var _timer:Timer = new Timer(250, 0);;
		
		private var _bitMap:Bitmap = new Bitmap();
	
		private var _h_pos:int = 0;
		
		private var _v_pos:int  = 0;
		
		private var _playerBitmapManager:PlayerBitmapManager;
		
		private var _loader:Loader;
		
		private var _request:URLRequest;
		
		private var _frm:JFrame;
		
		/** 横向切割数 */
		private var _hNum:int;
		
		/** 纵向切割数 */
		private var _vNum:int;
		

		
		
		public function BitmapDataExample($hNum:int = 7, $vNum:int = 6) {
			
			AsWingManager.initAsStandard(this);
			
			_hNum = $hNum;
			_vNum = $vNum;
			
			
			_frm = new JFrame(null, "浏览");
			_frm.setSizeWH(200, 200);
			
			_playerBitmapManager = new PlayerBitmapManager(_hNum, _vNum);
			
			configureAssets();
		}
		
		
		private function configureAssets():void {
			_loader = new Loader();
			
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
			_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			
			_request = new URLRequest(url);
			
			_loader.load(_request);
		
		}
		
		
		private function completeHandler(event:Event):void {
		
			var loader:Loader = Loader(event.target.loader);
			var image:Bitmap = Bitmap(loader.content);
			
			_playerBitmapManager.addSpriteBitmap(url, image);
			
			
			_frm.getContentPane().addChild(_bitMap);
			_frm.show();
			
			
			_timer.addEventListener(TimerEvent.TIMER, __onTimerHandler);
			_timer.start();
			
			
			
		}

		private function __onTimerHandler(event:TimerEvent):void{
			
			if(_h_pos == _vNum){
				_timer.stop();
			}else{
			
				_bitMap.bitmapData = _playerBitmapManager.getSpriteBitmap("img.png", _h_pos, _v_pos);
				
				if(++_v_pos == _hNum){
					++_h_pos;
					_v_pos = 0;
				}
			}
			
		}
		
		
		private function ioErrorHandler(event:IOErrorEvent):void {
			trace("Unable to load image: " + url);
		}
	}

}

 其中用到的工具类PlayerBitmapManager.as

package com.xlands.avatar
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.utils.getTimer;
	
	import org.aswing.util.HashMap;
	
	/**
	 * 人物形象图像数据管理者
	 * @author senkay
	 */ 
	public class PlayerBitmapManager
	{
		private var _hNum:int;
		
		private var _vNum:int;
		
		
		private static var bitmaps:HashMap;
		private static var bitNumMaps:HashMap;
		private static var localplayerPath:String;
		
		public function PlayerBitmapManager($hNum:int, $vNum:int){
			this._hNum = $hNum;
			this._vNum = $vNum;
		}
		
		
		private function getBitmaps():HashMap{
			if (bitmaps == null){
				bitmaps = new HashMap();
			}
			return bitmaps;
		}
		
		private function getBitNumMaps():HashMap{
			if (bitNumMaps == null){
				bitNumMaps = new HashMap();
			}
			return bitNumMaps;
		}
		
		public function hasSpriteBitmap(path:String):Boolean{
			return getBitmaps().containsKey(path);
		}
		
		public function addSpriteBitmapCout(path:String):void{
			getBitNumMaps().put(path,  (getBitNumMaps().get(path) as int)+1);
		}
		
		/**
		 * 加入人物形象数据
		 * @parm path 路径
		 * @bitmap 人物形象数据
		 */ 
		public function addSpriteBitmap(path:String, bitmap:Bitmap):void{
			var time:Number = getTimer();
			if (!getBitmaps().containsKey(path)){
				if (bitmap.width==0 || bitmap.height==0) return;
				var bitmapdata:BitmapData = bitmap.bitmapData;
				var sWidth:Number = Math.floor(bitmap.width/_hNum);
				var sHeight:Number =  Math.floor(bitmap.height/_vNum);
				var bitarray:Array = new Array();
				for (var i:int=0; i<_vNum; i++){
					var arr:Array = new Array();
					for (var j:int=0; j<_hNum; j++){
						if (i == 5 && j == 2){
							continue;
						}else{
							try{
								var bmd:BitmapData = new BitmapData(sWidth,sHeight,true,0x00FFFFFF);						
								bmd.copyPixels(bitmapdata, new Rectangle(sWidth*j, sHeight*i, sWidth, sHeight), new Point(0,0));
							}catch(e:Error){
								trace("the copyPixels is error:"+e);
								return;
							}
							arr.push(bmd);
						}				
					}
					bitarray.push(arr);
					getBitNumMaps().put(path, 1);
				}
				getBitmaps().put(path, bitarray);
			}else{
				getBitNumMaps().put(path,  (getBitNumMaps().get(path) as int)+1);
			}
			//trace("@@@@@@@@@@@@:"+(getTimer()-time));			
		}
		
		/**
		 * 根据形象路径和坐标返回形象数据
		 * @parm path 路径
		 * @parm h_pos,v_pos 数组坐标
		 * @return BitmapData 形象数据
		 */  
		public function getSpriteBitmap(path:String, h_pos:int, v_pos:int):BitmapData{
			if (getBitmaps().containsKey(path)){
				return (getBitmaps().get(path) as Array)[h_pos][v_pos] as BitmapData;
			}else{
				return null;
			}
		}
		
		/**
		 * 删除形象数据
		 * @parm path 形象路径
		 */ 
		public function delSpriteBitmap(path:String):void{
			if (getBitmaps().containsKey(path)){
				var num:int = getBitNumMaps().get(path);
				if (num > 1){
					getBitNumMaps().put(path,  num-1);
				}else{
					getBitmaps().remove(path);
					getBitNumMaps().remove(path);
				}
			}
		}
		
		/**
		 * 清除所有的形象数据
		 */ 
		public function clearAllSprite():void{
			var bitarray:Array = getBitmaps().get(localplayerPath);
			getBitmaps().clear();
			getBitNumMaps().clear();
			if (bitarray){
				getBitmaps().put(localplayerPath, bitarray);
				getBitNumMaps().put(localplayerPath, 1);
			}
		}
		
		/**
		 * 设置主人物的路径,用以清楚数据时候恢复
		 */ 
		public function setLocalPlayerPath(path:String):void{
			localplayerPath = path;
		}
		
		/**
		 * 查询形象数据状态
		 * @return String 状态
		 */
		public function getDebugInfo():String{
			return "形象数据状态:数量="+getBitmaps().keys().length;
		}
	}
}

 

 

分享到:
评论

相关推荐

    MFC多张位图连续动画显示程序练习

    在本文中,我们将深入...通过以上步骤,你可以成功地利用MFC开发出一个在对话框模式下连续播放位图动画的程序。这个过程涵盖了MFC的基础知识,如对话框、位图处理、定时器以及绘图操作,是提升MFC编程技能的好实践。

    一个位图动画程序

    位图动画程序是一种将一系列静态位图图像组合起来,通过快速连续播放来形成动态效果的技术。在计算机图形学中,位图(Bitmap)是图像的一种数据存储格式,它由像素阵列组成,每个像素有自己的颜色信息。位图动画通常...

    位图动画(VB6.0源代码编写)位图动画可以用路径

    位图动画是一种通过连续显示一系列位图图像来创建动态效果的技术。在VB6.0(Visual Basic 6.0)中实现位图动画,开发者通常会利用编程逻辑控制图像的顺序显示,从而达到动画的效果。这里我们将深入探讨如何使用VB6.0...

    vc++实现“动态”的位图动画实例

    7. **控制动画流程**: 可以添加按钮或菜单项来启动、暂停、停止或改变动画的播放速度,这需要在窗口类中处理相应的用户交互消息。 8. **内存管理和清理**: 当窗口关闭时,记得释放所有加载的位图资源,防止内存泄漏...

    多背景位图动画.rar_位图_位图 动画_动画 背景_调色板

    1. **帧管理**:存储并组织每一帧的位图数据,确保它们按正确的顺序播放。 2. **时间同步**:控制每一帧的显示时间,保持动画流畅性。 3. **颜色映射**:动态调整调色板,改变像素的颜色表示。 4. **像素操作**:...

    gif图片显示

    本文将深入探讨如何在Android应用中正确地显示`GIF`图片,包括解析`GIF`文件、使用`AnimationDrawable`播放位图以及缓存已解析的`GIF`内容。 首先,我们要了解`GIF`图片的工作原理。`GIF`文件由一系列连续的帧组成...

    BMP位图转换AVI视频例程

    本篇将深入探讨如何使用编程实现一个BMP位图转换为AVI视频的例程。BMP(Bitmap)是一种常见的位图格式,而AVI(Audio Video Interleave)则是一种广泛使用的视频容器格式。将BMP图像序列转换成AVI视频涉及到图像编码...

    俄罗斯方块(位图、音效)

    在技术实现层面,位图技术是构建《俄罗斯方块》游戏界面不可或缺的一部分。位图,也称为光栅图像,是一种像素矩阵的数据结构,每一像素包含了颜色值,共同构成图像。在游戏开发中,位图技术被用来绘制各种游戏元素,...

    实现“动态”的位图动画.rar_实现“动态”的位图动画

    9. **用户交互设计**: 考虑到动画可能需要用户控制,比如播放、暂停、快进等功能,需要设计相应的用户界面元素和事件处理函数。 10. **性能优化**: 对于大型或高帧率的动画,优化代码性能至关重要。这可能包括减少...

    VC++6.0 打开位图文件源代码 BMP图像数据的读取与显示

    在本文中,我们将深入探讨如何使用VC++ 6.0打开和显示位图(BMP)文件。位图文件是一种常见的图像格式,广泛应用于各种图形处理任务。在VC++ 6.0环境下,通过理解BMP文件结构和利用C++编程技巧,我们可以实现对BMP...

    mfc飞机大战游戏(没用位图,自己画的)

    在Windows环境中,MCI( Multimedia Control Interface)是一个常用的音频处理组件,它可以播放多种格式的音频文件,并且可以与MFC无缝结合。 然而,开发者提到游戏还存在一些未解决的问题,这可能涉及到游戏的性能...

    位图动画(VB6.0源代码编写)

    位图动画是一种常见的计算机图形动画技术,通过连续播放一系列位图图像来创造出动态的效果。在VB6.0(Visual Basic 6.0)环境中,我们可以利用编程技术实现位图动画的制作。VB6.0是Microsoft公司推出的一种可视化...

    NewBmpProgCtrl.rar_vc 进度条_位图进度条_游戏 VC_进度条

    总的来说,“NewBmpProgCtrl.rar_vc 进度条_位图进度条_游戏_VC_进度条”项目展示了如何利用VC++和MFC来创建一个具有个性化的进度条控件,并结合声音播放,提升用户体验。通过学习和实践这个项目,开发者可以深化对...

    vc++实现“静态”的位图动画源程序

    不过,需要注意的是,这只是一个基础的实现方式,实际的位图动画可能需要更复杂的逻辑,例如处理帧速率、循环播放、帧之间的过渡效果等。希望这个概述能帮助你理解如何在VC++环境中创建位图动画。

    位图动画(BitBlt)

    5. **动画循环**:编程实现动画的播放逻辑,包括帧速率控制、动画序列的循环、暂停和停止等。 6. **资源管理**:处理位图资源的加载、释放,避免内存泄漏,尤其在处理大量帧时尤为重要。 7. **用户交互**:结合...

    易语言GIF动画按钮源码,易语言位图按钮源码,易语言分隔条和对齐

    本资源包含的是易语言中与图形用户界面(GUI)相关的组件源码,具体包括GIF动画按钮、位图按钮、分隔条和对齐等元素的实现。这些组件是构建高效、美观的用户界面的关键部分。 首先,我们来看“GIF动画按钮源码”。...

    MFC多媒体播放器(包含.WAV播放,AVI播放器,Web浏览器,BMP位图)

    在这个特定的案例中,我们关注的是一个基于MFC(Microsoft Foundation Classes)框架的多媒体播放器,该播放器具备播放.WAV音频文件、.AVI视频文件、集成Web浏览器以及显示BMP位图图片的功能。以下是对这些知识点的...

    MFC多位图动画显示,可以暂停和开始

    - 添加两个成员变量来跟踪动画状态:一个布尔值表示是否正在播放,另一个记录当前显示的帧数。 - 实现开始和暂停按钮的响应函数,开始时启动定时器,暂停时停止定时器,并根据当前状态更新控件显示。 7. **释放...

    安卓Android源码——(动态位图).rar

    此外,`android.widget.GifView`或自定义的视图组件可能包含对动态位图的处理逻辑,比如自动循环播放和手动控制播放等功能。 为了优化性能,Android系统还会进行内存管理和缓存策略。例如,Android可能会根据内存...

Global site tag (gtag.js) - Google Analytics