`
hacker47
  • 浏览: 340429 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AS3进阶:利用缓冲池显示图片

阅读更多
无论是开发游戏,还是普通的应用,熟悉bitmapdata类的用法是有很必要的。利用bitmapdata作为缓冲池来显示图片,就是一个很常见的做法。

package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.GradientType;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.net.URLRequest;
	
	/**
	 * ...
	 * @author hacker47
	 */
	[SWF(width="800",height="600",frameRate="30",backgroundColor="0xFFFFFF")]
	public class Main extends Sprite 
	{
		private var imageCache:BitmapData;
		private var displayImageData:BitmapData;
		private var displayImage:Bitmap;
		private var displayRectTangle:Rectangle;
		private var startX:Number;
		private var startY:Number;
		private var endX:Number;
		private var endY:Number;
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			displayRectTangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
			
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
			stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
			// entry point
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
				imageCache = Bitmap(e.target.content).bitmapData;
				displayImageData = new BitmapData(displayRectTangle.width, displayRectTangle.height);
				displayImageData.copyPixels(imageCache, displayRectTangle, new Point(0,0));
				displayImage = new Bitmap(displayImageData);
				addChild(displayImage);
				drawWinFrame();
				stage.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel);
			});
			loader.load(new URLRequest("flash-tree.jpg"));
		}
		
		private function onDown(e:MouseEvent):void {
			startX = mouseX;
			startY = mouseY;
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
		
		private function onUp(e:MouseEvent):void {
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
		
		private function onMove(e:MouseEvent):void {
			endX = mouseX;
			endY = mouseY;
			displayRectTangle.x -= endX - startX;
			displayRectTangle.y -= endY - startY;
			drawNewImageView();
			startX = endX;
			startY = endY;
			
		}
		
		private function onWheel(e:MouseEvent):void {
			displayRectTangle.y -= e.delta*10;
			drawNewImageView();
		}
		
		private function drawNewImageView():void {
			if (displayRectTangle.x < 0) {
				displayRectTangle.x = 0;
			}else if ((displayRectTangle.x + displayRectTangle.width) > imageCache.width) {
				displayRectTangle.x = imageCache.width-displayRectTangle.width;
			}
			
			if (displayRectTangle.y < 0) {
				displayRectTangle.y = 0;
			}else if ((displayRectTangle.y + displayRectTangle.height) > imageCache.height) {
				displayRectTangle.y = imageCache.height-displayRectTangle.height;
			}
			
			
			imageCache.lock();
			displayImageData.copyPixels(imageCache, displayRectTangle, new Point());
			imageCache.unlock();
		}
		
		private function drawWinFrame():void {
			var s:Sprite = new Sprite();
			s.graphics.lineStyle(1);
			s.graphics.moveTo(0, 0);
			s.graphics.drawRect(0,0,displayRectTangle.width,displayRectTangle.height);
			addChild(s);
		}
		
	}
	
}

分享到:
评论

相关推荐

    C++进阶:内存泄漏与缓冲区溢出的检测

    NULL 博文链接:https://capers.iteye.com/blog/407755

    MySQL 进阶:提高数据库性能和优化查询.md

    ### MySQL 进阶:提高数据库性能和优化查询 #### 引言 MySQL作为一种广泛应用的关系型数据库管理系统,在实际应用中,其性能的优劣直接影响到业务系统的整体效率。本文旨在深入探讨如何通过一系列策略和技术手段来...

    操作系统模拟:缓冲池

    操作系统模拟:缓冲池 在计算机科学中,操作系统是管理和控制硬件与软件资源的软件,而缓冲池是操作系统中一个重要的概念。缓冲池是一种内存管理策略,它为多个并发进程提供共享的缓存区域,用于存储数据,以提高...

    vim使用进阶:vim使用技巧、配置、命令和插件

    【vim使用进阶】系列教程深入探讨了vim编辑器的高级使用技巧,涵盖了vim的配置、命令、插件以及各种实用功能。以下是对各部分主要内容的详细解释: 1. **序言**:作者分享了使用vim的心得体会,对初学者提出了一些...

    操作系统缓冲池模拟和实现(C++版)

    在项目中,开发者可能会使用STL容器(如vector或list)来存储缓冲区对象,利用C++的智能指针(如shared_ptr)来管理内存,同时结合C++11及更高版本提供的线程库来实现线程安全的缓冲池操作。 通过这个C++版的操作...

    DB2缓冲池和索引调优的方法

    * 缓冲池的_pagesize:缓冲池的_pagesize决定了缓冲池的大小,缓冲池的_pagesize太小,会导致缓冲池的大小太小,缓冲池的_pagesize太大,会导致缓冲池的大小太大。 此外,索引调优也非常重要,索引可以提高查询性能...

    非常实用的缓冲池类vc++

    3. **内存归还**:程序使用完内存后,不是直接释放回操作系统,而是将其放回到缓冲池的空闲链表中,供后续使用。这样可以避免内存碎片,提高内存利用率。 4. **内存块大小**:缓冲池通常会根据预期的内存需求选择...

    缓冲池的简单模拟-操作系统课程设计

    在操作系统领域,缓冲池是一种内存管理技术,用于提高系统效率,减少I/O操作的等待时间。缓冲池的设计目的是为了在多个进程或线程之间共享数据,通过缓存数据来优化数据传输,降低磁盘和内存之间的数据交换频率。在...

    I/O缓冲池演示程序

    在Windows环境中,可以利用Windows API中的I/O管理函数,如`CreateFile`、`ReadFile`和`WriteFile`,与I/O缓冲池配合工作。创建文件句柄后,通过调用这些API函数,将I/O操作与自定义的缓冲池进行关联,使得数据在...

    内存缓冲池的实现

    内存缓冲池是一种优化内存分配和释放的技术,它通过预先分配一大块内存并将其划分为多个固定大小的小块来提供高效的服务。在本文中,我们将详细探讨如何实现内存缓冲池,特别是采用多级链表的方式。 1. **多级链表...

    操作系统-缓冲池的模拟使用

    首先定义了缓冲队列类型和相关的宏定义,如`EMQ`、`INQ`和`OUTQ`,以及用于显示的宏`show1`、`show2`和`show3`。接着,定义了缓冲结构体`Buffer`,包含缓冲区号、缓冲内容和指向下一个缓冲区的指针。 在实验中,...

    STM32进阶之串口环形缓冲区实现

    ### STM32进阶之串口环形缓冲区实现 #### 一、引言 在嵌入式系统开发中,串口通信是非常基础且重要的环节之一。然而,在实际应用过程中,尤其是在数据量较大或数据传输速率较快的情况下,简单的串口中断接收发送...

    缓冲池实现

    3. **空闲缓冲区管理**:当缓冲区被读取后,应有机制回收和重新利用空闲缓冲区,避免无谓的内存分配。 4. **预读和滞后写**:通过预测未来需求(预读)和延迟不必要的写入(滞后写),可以进一步优化性能。 5. **...

    DB2缓冲池和索引调优的方法.doc

    DB2 缓冲池和索引调优的方法 DB2 缓冲池和索引调优是 DB2数据库性能优化的关键。缓冲池是 DB2 中的一块区域,用于存放频繁访问的数据,以提高数据库的性能。索引是 DB2 中的一种数据结构,用于快速定位数据。缓冲池...

    DB2的表空间和缓冲池

    3. **置换策略**:当缓冲池空间不足时,用于确定哪些数据页面应该被替换出缓冲池的策略。 4. **优先级**:可以为不同的缓冲池设置不同的优先级,高优先级的缓冲池更可能获得更多的内存资源。 #### 六、总结 在DB2...

    windows 缓冲池

    在Windows操作系统中,缓冲池是一种内存管理机制,用于优化系统对内存资源的分配和使用,尤其是在处理并发和多线程环境时。缓冲池的核心概念是将内存分配过程集中化,减少碎片并提高效率。本代码实现了一个特定的...

    缓冲池 (2).doc.zip

    缓冲池在计算机科学,...总结来说,缓冲池是Java编程中提高效率和资源利用率的重要手段,广泛应用于内存管理、数据库连接、数据库操作和多线程等领域。了解并正确使用缓冲池,对于编写高效、稳定的Java程序至关重要。

    缓冲池模拟及实现.docx

    - 掌握缓冲池的使用方法:了解如何在输入、计算和输出进程中有效地利用缓冲池,以实现数据的高效流动。 2. **实验内容**: - 实现并发执行的输入、计算和输出进程:这三个进程通过缓冲池进行通信,输入进程将数据...

    缓冲池模拟及实现.pdf

    《缓冲池的模拟实现》 缓冲池是一种在操作系统中用于管理共享资源的机制,它可以高效地处理并发进程之间的数据传输,提高系统性能。本实验旨在通过模拟实现缓冲池,让学生深入理解其工作原理和使用方法。 实验的...

    挖掘鸡7.1修复了缓冲池问题

    3. **内存泄漏**:如果不再使用的缓冲区没有正确释放,长期积累会导致系统可用内存减少,影响系统稳定性。 "挖掘鸡7.1"修复缓冲池问题意味着它现在能更稳定、安全地执行扫描任务,避免了上述潜在的风险。而提到的...

Global site tag (gtag.js) - Google Analytics