`

[转] 位图的九宫格(flash用)

阅读更多
[url]http://bbs.blueidea.com/viewthread.php?tid=2915069
[/url]

最近做游戏,发现flash里位图是无法使用scale9Grid这个属性,,,没办法,只好自己写了一个,,,原理很简单,,用程序把位图切成九块,,装里一个Sprite里,然后重写Sprite的width和height这两个方法,根据改变大小来重新设置位图的各个位置…这样就实现了位图的不变形缩放….
ps:近期我会把以前做的一些小东西的源码放出来,供大家学习使用…

严重声明,,,
发现好多人都不知道这个问题,,用FLASH编译,位图使用scale9Grid也没用,

/**
* @project dynasty
* @author 郭晟 or 猪哥靓
* @copyright 
* @document 
* @history 
* create 2009-2-20
* 位图Scale9Grid功能
**/
package
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    
    public class BitmapScale9Grid extends Sprite
    {
        private var source : Bitmap;
        private var scaleGridTop : Number;
        private var scaleGridBottom : Number;
        private var scaleGridLeft : Number;
        private var scaleGridRight : Number;
        
        private var leftUp : Bitmap;
        private var leftCenter : Bitmap;
        private var leftBottom : Bitmap;
        private var centerUp : Bitmap;
        private var center : Bitmap;
        private var centerBottom : Bitmap;
        private var rightUp : Bitmap;
        private var rightCenter : Bitmap;
        private var rightBottom : Bitmap;
        
        private var _width : Number;
        private var _height : Number;
        
        private var minWidth : Number;
        private var minHeight : Number;
        
        public function BitmapScale9Grid(source:Bitmap, scaleGridTop:Number, scaleGridBottom:Number, scaleGridLeft:Number, scaleGridRight:Number ) 
        {
            this.source = source;
            this.scaleGridTop = scaleGridTop;
            this.scaleGridBottom = scaleGridBottom;
            this.scaleGridLeft = scaleGridLeft;
            this.scaleGridRight = scaleGridRight;
            init();
            
        }
        
        private function init() : void {
            _width = source.width;
            _height = source.height;
            
            leftUp = getBitmap(0, 0, scaleGridLeft, scaleGridTop);
            this.addChild(leftUp);
            
            leftCenter = getBitmap(0, scaleGridTop, scaleGridLeft, scaleGridBottom - scaleGridTop);
            this.addChild(leftCenter);
            
            leftBottom = getBitmap(0, scaleGridBottom, scaleGridLeft, source.height - scaleGridBottom);
            this.addChild(leftBottom);
            
            centerUp = getBitmap(scaleGridLeft, 0, scaleGridRight - scaleGridLeft, scaleGridTop);
            this.addChild(centerUp);
            
            center = getBitmap(scaleGridLeft, scaleGridTop, scaleGridRight - scaleGridLeft, scaleGridBottom - scaleGridTop);
            this.addChild(center);
            
            centerBottom = getBitmap(scaleGridLeft, scaleGridBottom, scaleGridRight - scaleGridLeft, source.height - scaleGridBottom);
            this.addChild(centerBottom);
            
            rightUp = getBitmap(scaleGridRight, 0, source.width - scaleGridRight, scaleGridTop);
            this.addChild(rightUp);
            
            rightCenter = getBitmap(scaleGridRight, scaleGridTop, source.width - scaleGridRight, scaleGridBottom - scaleGridTop);
            this.addChild(rightCenter);
            
            rightBottom = getBitmap(scaleGridRight, scaleGridBottom, source.width - scaleGridRight, source.height - scaleGridBottom);
            this.addChild(rightBottom);
            
            minWidth = leftUp.width + rightBottom.width;
            minHeight = leftBottom.height + rightBottom.height;
        }
        
        private function getBitmap(x:Number, y:Number, w:Number, h:Number) : Bitmap {
            var bit:BitmapData = new BitmapData(w, h);
            bit.copyPixels(source.bitmapData, new Rectangle(x, y, w, h), new Point(0, 0));
            var bitMap:Bitmap = new Bitmap(bit);
            bitMap.x = x;
            bitMap.y = y;
            return bitMap;
        }
        
        override public function set width(w : Number) : void {
            if(w < minWidth) {
                w = minWidth;
            }
            _width = w;
            refurbishSize();
        }
        
        override public function set height(h : Number) : void {
            if(h < minHeight) {
                h = minHeight;
            }
            _height = h;
            refurbishSize();
        }
        
        private function refurbishSize() : void {
            leftCenter.height = _height - leftUp.height - leftBottom.height;
            leftBottom.y = _height - leftBottom.height;
            centerUp.width = _width - leftUp.width - rightUp.width;
            center.width = centerUp.width;
            center.height = leftCenter.height;
            centerBottom.width = center.width;
            centerBottom.y = leftBottom.y;
            rightUp.x = _width - rightUp.width;
            rightCenter.x = rightUp.x;
            rightCenter.height = center.height;
            rightBottom.x = rightUp.x;
            rightBottom.y = leftBottom.y;
        }
    }
}
分享到:
评论

相关推荐

    Flex位图九宫格处理工具

    Flex位图九宫格处理工具是一种在Flex应用中实现图像拉伸而不失真的技术,它主要利用了位图的九宫格(Scale9Grid)概念。位图九宫格是图形设计中的一个常见技巧,特别是在GUI开发中,用于创建可自适应大小的组件,如...

    ActionScript3位图九宫格缩放工具类

    帮助flash内实现图片的9宫格缩放,位图九宫格缩放,ActionScript3代码实现。

    as3 九宫格

    4. **创建Bitmap对象**:为每个位图数据创建一个Bitmap对象,这些对象将在舞台上用作九宫格的元素。 5. **布局与拉伸**:根据目标尺寸,计算每个Bitmap对象的新尺寸和位置。对于边缘和角落的Bitmap,保持它们的原始...

    [转]位图九宫

    【位图九宫格】是一种常见的图像处理技术,主要用于创建响应式布局或适应不同尺寸屏幕的设计。在网页设计和移动应用开发中,位图九宫格通常被用来展示图片,如用户头像、商品缩略图等,使它们在不同设备上能够自适应...

    J2ME 九宫格小游戏

    在这个场景中,我们关注的是一个使用J2ME技术开发的“九宫格小游戏”。这个游戏集成了背景音乐播放和积分存储功能,这展示了J2ME在游戏开发中的应用及其多媒体支持。 ### 1. J2ME基础知识 J2ME由几个配置和 ...

    js+html5实现手机九宫格密码解锁功能

    通过JavaScript动态获取浏览器窗口的宽度和高度,然后按照一定的比例调整Canvas的尺寸,从而保证九宫格在不同设备上的显示效果。同时,对于触屏设备的兼容性也进行了特别的优化。 6. 安全性问题 在实际的手机九宫格...

    自动处理并缩小九宫格图片类似9图

    "自动处理并缩小九宫格图片类似9图"的标题和描述指向了一种特定的图像处理技术,这种技术常用于Android应用开发,也适用于网页设计。9-patch(或称.9图)是一种图像格式,它允许开发者创建可伸缩的图片,以适应不同...

    易语言字节集转位图功能源码

    下面我们将深入探讨易语言中字节集转位图功能的实现原理以及相关知识点。 一、字节集与图像的关系 字节集本质上是连续的一串字节,可以用来表示各种类型的数据。对于图像而言,它包含了构成图像的像素信息。每个...

    android 位图转单色位图

    在Android开发中,有时我们需要将彩色的位图(Bitmap)转换为单色位图,以实现特定的效果,比如创建简单的二值化图像、节省内存或提高处理速度。本篇文章将详细探讨如何在Android中进行这种转换,从32位深图和24位深...

    javascript+canvas制作九宫格小程序

    本文主要讲述如何使用JavaScript和Canvas技术开发一个九宫格展示图片的小程序。通过这段内容,我们可以学习到如何将一张图片分割成九宫格,并以网格的形式展示出来。同时,我们还可以学到如何为这个九宫格添加动画...

    当前时间轴转位图序列.jsfl

    这是一个flashCS系列使用的jsfl文件。首先打开fla文档(该fla文档必须被保存过),之后双击运行该文件会将当前正在编辑的时间轴转换成位图序列。 适合flash移动开发、 flash网游素材制作和优化、 flash stage3D材质...

    九宫格2(八数码)

    综合以上分析,这个项目是一个用C++编写的九宫格2(八数码)游戏,它利用API来实现游戏逻辑,特别是通过全局择优搜索算法来寻找解决滑动拼图问题的最短路径。开发者可以通过这个游戏学习到如何使用图形界面、处理用户...

    九宫格拼图游戏

    在九宫格拼图游戏中,可能使用了LinearLayout、GridLayout或RelativeLayout等布局管理器来组织9个小方块的显示位置。 8. **触摸事件处理**:为了响应用户的触摸操作,游戏需要监听并处理Android系统的MotionEvent。...

    一键Flash库中位图转成无损及平滑

    自已总结,觉得对于Flash文档中大量图片的保真...可以对Flash IDE中所有打开的文档一键操作,也可以仅对当前文档操作,结果是将位图转为无损格式并且平滑。有需要的朋有看看。因为我的米米不多,所以此文档要宰你2分。

    彩色位图转成黑白位图

    总的来说,从彩色位图到单色位图的转换涉及了图像处理的基本原理和Windows API的使用。在VC环境下,我们可以利用GDI提供的丰富函数实现这一过程,并结合截图和文件操作功能,生成所需要的位图数据文件。这个过程不仅...

    16进制dat数据转.bmp位图文件 源码

    16进制dat数据转.bmp位图文件图片 源码: //dat数据转换为bmp图片(位图),并存入到指定名称的图片; //dat数据(my.dat)与当前程序文件在同一文件夹,"my.dat"为包含文件头的完整的位图数据,可以下载参考我的另外一个...

    24位图转16位图工具

    本篇文章将详细探讨“24位图转16位图工具”所涉及的知识点。 首先,我们来了解24位BMP(BITMAP24)图像。24位BMP图像提供了8位红、8位绿和8位蓝通道,总共24位,能够显示约1670万种颜色,这被称为真彩色。这种格式...

    Android九宫格手势密码代码设计

    首先,要实现九宫格密码界面,我们需要创建一个自定义View,因为Android的五大布局(LinearLayout, RelativeLayout, FrameLayout, GridLayout, ConstraintLayout)无法直接满足九宫格中每个点距离相等且围成正方形的...

    c语言旋转位图90度

    纯c函数写的旋转位图90度程序, 提供了编程接口方便调用。 不涉及任何平台相关代码,可以在windows和linux中运行。 其中变量定义用到了c++的规则(GNU c) 所以有些编译器可能报错, 请使用c++ 源代码格式cpp,再...

    很好用的图片转位图数据的工具

    很好用的图片转位图数据的工具,大家可以下载下来用一用,我本人做的

Global site tag (gtag.js) - Google Analytics