11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2531|回复: 4
上一主题 下一主题

[Bitmap 位图] 显示对象小练习(Bitmap及BitmapData)

[复制链接] TA的其它主题
发表于 2019-2-25 15:13:39 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 雪原xy 于 2019-2-25 15:21 编辑

[Actionscript3] 纯文本查看 复制代码
//显示对象小练习之四(Bitmap);
package{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.display.StageAlign
public class dis4 extends Sprite{
//定义一个BitmapData的实例,用来操作位图;
private var _bmpdt:BitmapData=new BitmapData(50,80,false,0x005588);
//定义一个Bitmap实例,加载BitmapData实例;
private var _bmp:Bitmap=new Bitmap(_bmpdt);
var _loader:Loader=new Loader();
//构造函数中执行两个重要方法:一是加载图片,一是切割图片;
public function dis4 ():void{
this.stage.scaleMode=StageScaleMode.EXACT_FIT;
this.stage.align=StageAlign.TOP_LEFT;
//规划位图位置;
//_bmp.x=100;
//_bmp.y=80;
//把位图加入显示列表,看看效果;
//addChild(_bmp);
//加载位图的方法;
initLoader();
//切割位图的方法;
//cutFun();
}
//定义切割方法;
private function cutFun():void{
//定义切割后小图片块的块数变量;
var _xx:int=3;
var _yy:int=3;
//根据块数计算每个小块的宽高;
var _w:Number=_bmpdt.width/_xx;
var _h:Number=_bmpdt.height/_yy;
//用copyPixels方法,借助for循环,复制每小块的像素数据;
for(var i:int=0;i<_xx;i++){
for(var j:int=0;j<_yy;j++){
//定义一个BitmapData变量,用来存放切割后的BitmapData数据;
var _bt:BitmapData=new BitmapData(_w,_h,false,0x000000);
//循环体中定义一个容器,用来显示每次切割好的位图;
var _s:Sprite=new Sprite();
//切割(复制)方法:三个参数分别是源数据,切割的位置及大小,复制后存放的位置;
_bt.copyPixels(_bmpdt,new Rectangle(j*_w,i*_h,_w,_h),new Point(0,0));
//定义一个Bitmap变量,用来加载复制好的BitmapData数据;
var _bp:Bitmap=new Bitmap(_bt);
//_s.width=_bp.width=this.stage.stageWidth/_xx;
//_s.height=_bp.height=this.stage.stageHeight/_yy;
//规划容器的位置;
_s.x=j*(this.stage.stageWidth/3+5);
_s.y=i*(this.stage.stageHeight/3+5);
//让容器的大小适应切割块的大小;
_s.scaleX=(this.stage.stageWidth/3)/_w;
_s.scaleY=(this.stage.stageHeight/3)/_h;
//把容器放入显示列表;并把切割好的位图放入容器;
addChild(_s);
_s.addChild(_bp);
//把每次显示出的的图片的代号输出,看看是不是自己想要的结果;
trace("图片:"+i+j)
}
}
trace("图片裁剪完成!")
}
//导入图片的方法;
private function initLoader():void{
//定义图片的地址变量,并用Loader类进行加载;
var _ur:String= "img/hh.JPG";
var _req:URLRequest=new URLRequest(_ur);
//用Loader类的contentLoaderInfi属性侦听加载进度;
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadF);
//设置一个捕获异常的命令,在加载图片的过程中捕获异常;
try{
trace("图片加载中……");
_loader.load(_req);
//把位图加入显示列表,看效果;
//addChild(_loader);
}
catch(e:Error){
trace("图片加载出现异常:"+e.name);
}
}
//图片加载侦听器;
private function loadF(ev:Event):void{
        var xb:Bitmap=ev.target.content as Bitmap;
//把加载好的图片赋值给_bmp实例,Loader类的content属性在这里就是位图;
_bmp=xb;
//让加载的图片大小适应舞台;
_bmp.width=this.stage.stageWidth;
_bmp.height=this.stage.stageHeight;
//把_bmp的bitmapData属性赋值给_bmpdt,到此加载图片的任务全部完成;
_bmpdt=_bmp.bitmapData;
//把加载好的图片显示出来对比一下;
//addChild(xb);
//addChild(_bmp);
trace("图片加载完成!");
//看看这时位图数据的高是否等于舞台的高;
trace(_bmpdt.height);
//切割位图的方法;
cutFun();
}
}
}



这是效果图

这是效果图

显示对象之四.swf

2.03 KB, 下载次数: 3, 下载积分: 银子 -10 , 活跃 1

本地文件放在网上不知道能不能显示

评分

参与人数 1银子 +10 金子 +1 贡献 +1 收起 理由
TKCB + 10 + 1 + 1 11RIA six six six.(666)

查看全部评分

 楼主| 发表于 2019-2-25 15:37:57 | 显示全部楼层
效果终于做出来了,好开心!
代码有点乱,
主要是因为老是出不来效果,改了又改,试了又试;
就成现在这个样子了!
学习总结:
1、Bitmap与BitmapData是一个整体,它们结合在一起才能显示了精彩的图片!
2、Loader加载出来的内容(content)有两种类型的文件:MovieClip和Bitmap;
3、舞台的宽高属性是用代码更改不了的,只能想办法让显示对象缩放来把比较大的内容显示出来;
学习困惑:
1、变量的作用域是很难理解的东西(特别是有for循环中),查了很多资料还是迷迷糊糊;
2、BitmapData的方法太多了,牵扯到很多类,很难理解;
     特别是copyPixels与draw两方法很相似,但不知道区别是什么?
3、安全沙箱、策略文件等等还是不理解,转不过弯了!!
回复

使用道具 举报

发表于 2019-2-25 15:48:25 | 显示全部楼层
1. 舞台的默认宽度和高度是无法修改的,但是,注意但是哦!
但是可以调整Flash Player的显示窗口大小,这样其实就相当于把舞台变大了,其实舞台就是一个默认的Flash Player窗口大小的值而已。

2. 变量的作用域很简单,一般就是是否对外,是否类属性,是否函数内。

3. BitmapData 确实有很多方法,你可以先学自己能学会的,有一些我也不太清楚。。
代码是学不完的,不是所有代码都是你能用到的,就像键盘上面的按键,你总有几个是根本不会用到的。
学会常用的就很不错了,然后在根据自己的兴趣爱好,在一个小的领域分支努力深入研究。

4. 安全沙箱这个主要是针对网络上面的Flash SWF,因为如果浏览器中的SWF有太多权限,例如:修改本地文件,那浏览器网页就太不安全了。
这个可以慢慢接触学习。。

学习有一个关键点,学基础,非基础的,可以忽略。因为等用到了再去学,也来得及。不用的时候学了,也很容易忘记。
回复

使用道具 举报

发表于 2019-2-25 16:18:42 | 显示全部楼层
【11RIA 闪客社区,评分公示】:
是否有价值:一般(银子 +10  贡献 +1)
是否原创:是(金子 +1)
是否翻译:否
如对自己的评分有疑问,则咨询版主、管理员等。
回复

使用道具 举报

 楼主| 发表于 2019-2-25 16:35:28 | 显示全部楼层
TKCB 发表于 2019-2-25 15:48
1. 舞台的默认宽度和高度是无法修改的,但是,注意但是哦!
但是可以调整Flash Player的显示窗口大小,这样 ...

感谢赐教!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表