`

scale9Gird图片

    博客分类:
  • flex
阅读更多

http://code.google.com/p/as3ui/ 一个类 setSize方法,指定图片宽高

/**
 *
 *	ScaleBitmap
 *	
 * 	@version	1.1
 * 	@author 	Didier BRUN	-  http://www.bytearray.org
 * 	
 * 	@version	1.2.1
 * 	@author		Alexandre LEGOUT - http://blog.lalex.com
 *
 * 	@version	1.2.2
 * 	@author		Pleh
 * 	
 * 	Project page : http://www.bytearray.org/?p=118
 *
 */

package org.bytearray.display {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Matrix;
	import flash.geom.Rectangle;	

	public class ScaleBitmap extends Bitmap {

		// ------------------------------------------------
		//
		// ---o properties
		//
		// ------------------------------------------------

		protected var _originalBitmap : BitmapData;
		protected var _scale9Grid : Rectangle = null;

		// ------------------------------------------------
		//
		// ---o constructor
		//
		// ------------------------------------------------

		
		function ScaleBitmap(bmpData : BitmapData = null, pixelSnapping : String = "auto", smoothing : Boolean = false) {
			
			// super constructor
			super(bmpData, pixelSnapping, smoothing);
		
			// original bitmap
			_originalBitmap = bmpData.clone();
		}

		// ------------------------------------------------
		//
		// ---o public methods
		//
		// ------------------------------------------------
		
		/**
		 * setter bitmapData
		 */
		override public function set bitmapData(bmpData : BitmapData) : void {
			_originalBitmap = bmpData.clone();
			if (_scale9Grid != null) {
				if (!validGrid(_scale9Grid)) {
					_scale9Grid = null;
				}
				setSize(bmpData.width, bmpData.height);
			} else {
				assignBitmapData(_originalBitmap.clone());
			}
		} 

		/**
		 * setter width
		 */
		override public function set width(w : Number) : void {
			if (w != width) {
				setSize(w, height);
			}
		}

		/**
		 * setter height
		 */
		override public function set height(h : Number) : void {
			if (h != height) {
				setSize(width, h);
			}
		}

		/**
		 * set scale9Grid
		 */
		override public function set scale9Grid(r : Rectangle) : void {
			// Check if the given grid is different from the current one
			if ((_scale9Grid == null && r != null) || (_scale9Grid != null && !_scale9Grid.equals(r))) {
				if (r == null) {
					// If deleting scalee9Grid, restore the original bitmap
					// then resize it (streched) to the previously set dimensions
					var currentWidth : Number = width;
					var currentHeight : Number = height;
					_scale9Grid = null;
					assignBitmapData(_originalBitmap.clone());
					setSize(currentWidth, currentHeight);
				} else {
					if (!validGrid(r)) {
						throw (new Error("#001 - The _scale9Grid does not match the original BitmapData"));
						return;
					}
					
					_scale9Grid = r.clone();
					resizeBitmap(width, height);
					scaleX = 1;
					scaleY = 1;
				}
			}
		}

		/**
		 * assignBitmapData
		 * Update the effective bitmapData
		 */
		private function assignBitmapData(bmp : BitmapData) : void {
			super.bitmapData.dispose();
			super.bitmapData = bmp;
		}

		private function validGrid(r : Rectangle) : Boolean {
			return r.right <= _originalBitmap.width && r.bottom <= _originalBitmap.height;
		}

		/**
		 * get scale9Grid
		 */
		override public function get scale9Grid() : Rectangle {
			return _scale9Grid;
		}

		
		/**
		 * setSize
		 */
		public function setSize(w : Number, h : Number) : void {
			if (_scale9Grid == null) {
				super.width = w;
				super.height = h;
			} else {
				w = Math.max(w, _originalBitmap.width - _scale9Grid.width);
				h = Math.max(h, _originalBitmap.height - _scale9Grid.height);
				resizeBitmap(w, h);
			}
		}

		/**
		 * get original bitmap
		 */
		public function getOriginalBitmapData() : BitmapData {
			return _originalBitmap;
		}

		// ------------------------------------------------
		//
		// ---o protected methods
		//
		// ------------------------------------------------
		
		/**
		 * resize bitmap
		 */
		protected function resizeBitmap(w : Number, h : Number) : void {
			
			var bmpData : BitmapData = new BitmapData(w, h, true, 0x00000000);
			
			var rows : Array = [0, _scale9Grid.top, _scale9Grid.bottom, _originalBitmap.height];
			var cols : Array = [0, _scale9Grid.left, _scale9Grid.right, _originalBitmap.width];
			
			var dRows : Array = [0, _scale9Grid.top, h - (_originalBitmap.height - _scale9Grid.bottom), h];
			var dCols : Array = [0, _scale9Grid.left, w - (_originalBitmap.width - _scale9Grid.right), w];

			var origin : Rectangle;
			var draw : Rectangle;
			var mat : Matrix = new Matrix();

			
			for (var cx : int = 0;cx < 3; cx++) {
				for (var cy : int = 0 ;cy < 3; cy++) {
					origin = new Rectangle(cols[cx], rows[cy], cols[cx + 1] - cols[cx], rows[cy + 1] - rows[cy]);
					draw = new Rectangle(dCols[cx], dRows[cy], dCols[cx + 1] - dCols[cx], dRows[cy + 1] - dRows[cy]);
					mat.identity();
					mat.a = draw.width / origin.width;
					mat.d = draw.height / origin.height;
					mat.tx = draw.x - origin.x * mat.a;
					mat.ty = draw.y - origin.y * mat.d;
					bmpData.draw(_originalBitmap, mat, null, null, draw, smoothing);
				}
			}
			assignBitmapData(bmpData);
		}
	}
}
 
测试代码

package 
{
	import com.bit101.components.ProgressBar;
	import com.bit101.components.PushButton;
	import com.bit101.components.Style;
	import flash.display.Bitmap;
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.Event;
	import org.bytearray.display.ScaleBitmap;
	
	/**
	 * ...
	 * @author yongkang
	 */
	public class Main extends Sprite 
	{
	
		[Embed(source='/resources/123.jpg')]
		private var icon:Class;
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			var bitmap:Bitmap = new icon as Bitmap;
			
			var sb:ScaleBitmap = new ScaleBitmap(bitmap.bitmapData);
			sb.bitmapData = bitmap.bitmapData;
			sb.setSize(800, 800);
			this.addChild(sb);
			
			
			
		}
	
			
	}
			
			
			
}
分享到:
评论

相关推荐

    Gird.zip mfc 写的GIRD 源码

    在本文中,我们将深入探讨由MFC(Microsoft Foundation Classes)编写的GIRD源码,以及在C++编程环境中如何利用这些源码实现基于对话框和Doc/View结构的应用。MFC是一个C++类库,它提供了对Windows API的封装,使得...

    ext超酷的grid中放图片(ext3.2.1)

    标题"ext超酷的grid中放图片(ext3.2.1)"暗示了我们将探讨如何在EXT JS的Grid组件中嵌入和展示图片。EXT JS 3.2.1虽然已经是较旧的版本,但其核心概念和方法在后续版本中仍然适用,因此学习这部分内容对于理解EXT JS...

    GT-GIRD,一个很优秀的GIRD前台组件

    GT-GIRD是一款杰出的前端表格组件,专为构建高效、响应式的数据展示界面而设计。在Web开发领域,尤其是在处理大量数据的展示时,选择一款性能优异、功能强大的表格组件至关重要。GT-GIRD以其轻量级、快速以及免费的...

    VC-MS-GIRD.rar_CellDemo _MS GIRD_gird_表格 excel vc_表格 vc

    【标题】"VC-MS-GIRD.rar" 是一个基于Visual C++(简称VC)开发的电子表格应用程序,它模仿了MS OFFICE中的表格处理软件,如Microsoft Excel的风格。这个项目名为"CellDemo _MS GIRD_gird_表格 excel vc_表格 vc",...

    Extjs2.0动态加载gird的例子

    ExtJS 2.0是一款基于JavaScript的开源框架,用于构建富客户端Web应用程序。在这个例子中,我们将探讨如何在ExtJS 2.0中实现动态加载的Grid组件,这是一个非常实用的功能,尤其对于处理大量数据时,可以显著提高用户...

    selenium gird 资源part2

    selenium gird 资源part2

    Gird网格布局学习笔记分享

    Gird网格布局学习笔记分享

    Gridview点击切换图片

    当用户对某个图片进行点赞或取消点赞时,星标图片需要相应地改变。这同样在`getView()`中实现,通过设置ImageView的src属性来更换图片资源。 7. 数据刷新: 当用户操作(如点赞或切换图片)后,需要更新Adapter的...

    selenium gird资源

    selenium gird资源selenium gird资源part1

    exejs gird filter java action

    【exejs gird filter java action】是一个专题,主要涉及了前端数据展示库ExeJS、Grid组件、过滤功能以及后端处理数据的Java Action技术。这个整合资料集合可能包括了一个Web应用项目,用于演示如何在Java后端和前端...

    Gird_Eye模块的Linux上位机

    Gird_Eye模块的Linux上位机,用qt开发,里面涉及到Linux串口通信编程

    Echarts参数属性学习Gird演示案例

    在"**Echarts参数属性学习Gird演示案例**"中,我们将重点探讨如何使用ECharts的Gird组件来在同一DOM元素内同时展示多种图表,以实现高效的数据呈现和API接口的优化对接。 **Gird组件**是ECharts中用于定义图表区域...

    Bootstrap Gird系统「Bootstrap Gird System」-crx插件

    在您的浏览器上创建Bootstrap Gird系统 在浏览器上创建Bootstrap Gird系统,轻松调整大小和拖放功能 支持语言:English

    gird模板列的创建

    本示例主要介绍了如何在DataGrid中创建一个模板列,以显示数据表中存储的图片路径。这涉及到两个核心知识点:DataGrid的模板列使用和数据绑定。 首先,我们要理解DataGrid的模板列(TemplateColumn)。模板列允许...

    gird_layout.zip

    在`gird_layout.zip`这个压缩包中,很可能包含了一个使用`Qt`的`网格布局`创建的示例项目。解压并查看这个文件,你将能够看到如何实际应用上述概念,包括布局的创建、控件的添加以及各种属性的设置。这对于学习和...

    ligerui之gird

    《深入解析LigerUI中的Grid控件》 在Web开发领域,前端框架的使用极大地提升了开发效率和用户体验。其中,LigerUI是一个优秀的JavaScript库,它提供了丰富的UI组件,包括我们今天要探讨的核心部分——Grid控件。...

    Printer first Gird打印预览控件VB源程序

    本文将深入探讨“Printer first Gird打印预览控件”及其VB源程序,这是一种专用于实现打印预览功能的组件,对于开发者来说,能够极大地提升应用程序的专业性和用户体验。 首先,"Printer first Gird"这个名字暗示了...

    Google gird瀑布流相册效果,点击之后弹出放大后的图片,可以按键盘左右键或页面上的左右箭头浏览,十分方便。兼容主流浏览器

    在IT领域,瀑布流布局(Masonry Layout)是一种常见的网页设计模式,尤其在展示图片或者内容集合时,这种布局能够使页面看起来更有层次感和视觉吸引力。Google Grid瀑布流相册效果是基于这一布局原理,结合jQuery库...

    CSS Gird布局教程指南

    CSS Grid布局是现代Web开发中一个强大的二维布局系统,它为设计复杂的网页界面提供了更为直观和灵活的方法。在过去的几年里,CSS布局方法经历了从表格布局、浮动元素、定位和inline-block等技术到Flexbox的一维布局...

    ext Gird 有滚动条功能

    Ext Grid 是一个强大的数据展示组件,常用于在Web应用程序中展示结构化数据。在Ext Grid中,滚动条功能是至关重要的,特别是在处理大量数据时,它允许用户在不改变窗口大小的情况下浏览数据。本篇文章将深入探讨Ext ...

Global site tag (gtag.js) - Google Analytics