无论是开发游戏,还是普通的应用,熟悉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);
}
}
}
分享到:
相关推荐
利用bufexplorer插件,则可以方便的查看打开的缓冲区(buffer),在缓冲区间进行切换。本文的最后介绍了winmanager插件,使用这个插件,可以把netrw插件、bufexplorer插件和taglist插件整合起来,使vim看起来更像一个...
NULL 博文链接:https://capers.iteye.com/blog/407755
用java编程实现的缓冲池,用于模拟操作系统相关内容。
06 案例分析:缓冲区如何让代码加速.mp4 07 案例分析:无处不在的缓存,高并发系统的法宝.mp4 08 案例分析:Redi如何助力秒杀业务.mp4 09 案例分析:池化对象的应用场景.mp4 10 案例分析:大对象复用的目标和...
操作系统缓冲池模拟和实现(C++版) 用来实现和模拟操作系统中缓冲池的操作 很有用操作系统缓冲池模拟和实现(C++版) 用来实现和模拟操作系统中缓冲池的操作 很有用
非常实用的缓冲池类非常实用的缓冲池类非常实用的缓冲池类非常实用的缓冲池类非常实用的缓冲池类非常实用的缓冲池类
利用bufexplorer插件,则可以方便的查看打开的缓冲区(buffer),在缓冲区间进行切换。本文的最后介绍了winmanager插件,使用这个插件,可以把netrw插件、bufexplorer插件和taglist插件整合起来,使vim看起来更像一个...
内存缓冲池的实现,用链表实现的内存分配与释放
这种处理方式是没有缓冲区的,当数量太大的时候,亦或者当数据接收太快的时候,我们来不及处理已经收到的数据, 那么,当再次收到数据的时候,就会将之前还未处理的数据覆盖掉。那么就会出现丢包的现象了,对我们的...
STM32进阶之串口环形缓冲区实现 FIFO,代码精简,易实现。
这是模拟操作系统中的缓冲池的一个小例子!值得学习
操作系统中的I/O管理,I/O缓冲池程序,使用C++编写,Windows环境
网上很不错的,DB2缓冲池和索引调优的方法
│ 开篇词 Java 性能优化,是进阶高级架构师的炼金石.mp4 │ 02 理论分析:性能优化有章可循,谈谈常用的切入点.mp4 │ 03 深入剖析:哪些资源,容易成为瓶颈?.mp4 │ 04 工具实践:如何获取代码性能数据?....
c3p0数据库缓冲池配置 a----最大JDBC连接数量,超出这个数量就会抛异常. b----最少JDBC连接数量. c----以秒为单位。如果空闲连接的空闲超过了timeout,就会删除 d----最大的PreparedStatement的数量 e----每隔...
DB2的表空间和缓冲池
BufferManager:数据库缓冲池是一组固定大小的内存缓冲区(称为帧),用于保存从磁盘读取到内存中的数据库页面(也称为磁盘块)。 页是磁盘与驻留在主内存中的缓冲池之间的传输单位。 大多数现代数据库系统使用的页面...
VC做的缓冲池的简单模拟。 很简单。 但是没有实现并发~
Prober:利用缓冲区中的顺序特性改善SSD的写入性能
参数3:缓冲所使用的时间(秒) ButterProgress2(ByVal CurrentSpeed As Single, ByVal ExpectButterTime As Single)):网络文件缓冲中 参数1:当前缓冲速度(字节/秒) 参数2:预计缓冲时间(秒) ...