`

ActionScript 3 PNG编辑器

阅读更多

下面的AS代码实现了一个PNG的编辑器:

AS 代码
  1. /*  
  2. Adobe Systems Incorporated(r) Source Code License Agreement  
  3. Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved.  
  4.  
  5. Please read this Source Code License Agreement carefully before using  
  6. the source code.  
  7.  
  8. Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive,   
  9. no-charge, royalty-free, irrevocable copyright license, to reproduce,  
  10. prepare derivative works of, publicly display, publicly perform, and  
  11. distribute this source code and such derivative works in source or   
  12. object code form without any attribution requirements.    
  13.  
  14. The name "Adobe Systems Incorporated" must not be used to endorse or promote products  
  15. derived from the source code without prior written permission.  
  16.  
  17. You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and  
  18. against any loss, damage, claims or lawsuits, including attorney's   
  19. fees that arise or result from your use or distribution of the source   
  20. code.  
  21.  
  22. THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT   
  23. ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,  
  24. BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS  
  25. FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  ALSO, THERE IS NO WARRANTY OF   
  26. NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT.  IN NO EVENT SHALL MACROMEDIA  
  27. OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
  28. EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,   
  29. PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  
  30. OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,   
  31. WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR   
  32. OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF  
  33. ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
  34. */  
  35.   
  36.             package com.adobe.images {   
  37.     import flash.geom.*;   
  38.     import flash.display.Bitmap;   
  39.     import flash.display.BitmapData;   
  40.     import flash.utils.ByteArray;   
  41.         
  42.     public class PNGEncoder   
  43.     {   
  44.         public static function encode(img:BitmapData):ByteArray {   
  45.             // Create output byte array   
  46.             var png:ByteArray = new ByteArray();   
  47.             // Write PNG signature   
  48.             png.writeUnsignedInt(0x89504e47);   
  49.             png.writeUnsignedInt(0x0D0A1A0A);   
  50.             // Build IHDR chunk   
  51.             var IHDR:ByteArray = new ByteArray();   
  52.             IHDR.writeInt(img.width);   
  53.             IHDR.writeInt(img.height);   
  54.             IHDR.writeUnsignedInt(0x08060000); // 32bit RGBA   
  55.             IHDR.writeByte(0);   
  56.             writeChunk(png,0x49484452,IHDR);   
  57.             // Build IDAT chunk   
  58.             var IDAT:ByteArray= new ByteArray();   
  59.             for(var i:int=0;i < img.height;i++) {   
  60.                 // no filter   
  61.                 IDAT.writeByte(0);   
  62.                 var p:uint;   
  63.                 var j:int;   
  64.                 if ( !img.transparent ) {   
  65.                     for(j=0;j < img.width;j++) {   
  66.                         p = img.getPixel(j,i);   
  67.                         IDAT.writeUnsignedInt(   
  68.                             uint(((p&0xFFFFFF) << 8)|0xFF));   
  69.                     }   
  70.                 } else {   
  71.                     for(j=0;j < img.width;j++) {   
  72.                         p = img.getPixel32(j,i);   
  73.                         IDAT.writeUnsignedInt(   
  74.                             uint(((p&0xFFFFFF) << 8)|   
  75.                             (p>>>24)));   
  76.                     }   
  77.                 }   
  78.             }   
  79.             IDAT.compress();   
  80.             writeChunk(png,0x49444154,IDAT);   
  81.             // Build IEND chunk   
  82.             writeChunk(png,0x49454E44,null);   
  83.             // return PNG   
  84.             return png;   
  85.         }   
  86.        
  87.         private static var crcTable:Array;   
  88.         private static var crcTableComputed:Boolean = false;   
  89.        
  90.         private static function writeChunk(png:ByteArray,    
  91.                 type:uint, data:ByteArray):void {   
  92.             if (!crcTableComputed) {   
  93.                 crcTableComputed = true;   
  94.                 crcTable = [];   
  95.                 var c:uint;   
  96.                 for (var n:uint = 0; n < 256; n++) {   
  97.                     c = n;   
  98.                     for (var k:uint = 0; k < 8; k++) {   
  99.                         if (c & 1) {   
  100.                             c = uint(uint(0xedb88320) ^    
  101.                                 uint(c >>> 1));   
  102.                         } else {   
  103.                             c = uint(c >>> 1);   
  104.                         }   
  105.                     }   
  106.                     crcTable[n] = c;   
  107.                 }   
  108.             }   
  109.             var len:uint = 0;   
  110.             if (data != null) {   
  111.                 len = data.length;   
  112.             }   
  113.             png.writeUnsignedInt(len);   
  114.             var p:uint = png.position;   
  115.             png.writeUnsignedInt(type);   
  116.             if ( data != null ) {   
  117.                 png.writeBytes(data);   
  118.             }   
  119.             var e:uint = png.position;   
  120.             png.position = p;   
  121.             c = 0xffffffff;   
  122.             for (var i:int = 0; i < (e-p); i++) {   
  123.                 c = uint(crcTable[   
  124.                     (c ^ png.readUnsignedByte()) &    
  125.                     uint(0xff)] ^ uint(c >>> 8));   
  126.             }   
  127.             c = uint(c^uint(0xffffffff));   
  128.             png.position = e;   
  129.             png.writeUnsignedInt(c);   
  130.         }   
  131.                   }   
  132.           }   
分享到:
评论

相关推荐

    RPG地图编辑器

    《RPG地图编辑器——源码与工具解析》 在游戏开发领域,RPG(角色扮演游戏)地图编辑器是一款至关重要的工具,它允许开发者轻松创建和编辑游戏中的地图场景,为玩家提供丰富的冒险环境。本篇文章将深入探讨RPG地图...

    flash富头像上传编辑器

    "scripts"目录可能包含了编辑器运行所需的JavaScript或ActionScript代码,这些脚本负责前端的交互逻辑,比如文件选择、预览、上传进度显示等功能。它们与服务器端脚本配合,形成完整的上传和编辑流程。 总结,...

    很好用的Flash编辑器

    对于有编程基础的用户,SWFQuicker提供了ActionScript编辑器,可以编写和调试ActionScript代码,实现动画的交互性。通过脚本,用户可以控制对象的行为,响应用户事件,实现复杂的逻辑。 5. **音频与视频集成**: ...

    SWF反编辑软件

    ActionScript编辑器,它可以帮助用户编写 ActionScript直接与语法助理 高亮显示,自动成员列表,参数 信息和自动的代码完成,特别 您可以添加文字,形状,电影的效果, 剪辑,完全可以帮你的忙得到 独特的效果,只需...

    JPEXS Free Flash Decompiler 媲美硕思闪客精灵反编译.exe

    程序可以查看 的ActionScript1/2的源代码或 3 个部分,将其导出或编辑(代码编辑器AS3)。文本或图像可以被编辑或更换。在 SWF 反编译器还可以导出形状,图像,声音或电影。 SWF 为 FLA 格式转换也可以。JPEXS Free ...

    pixas-editor:等距像素图形编辑器

    今天我们将深入探讨一个专为此目的打造的工具——pixas-editor,这是一款基于ActionScript开发的等距像素图形编辑器。 一、pixas-editor简介 pixas-editor是专门为等距像素艺术设计的图形编辑器,它允许艺术家们在...

    带3D的flash时钟.rar

    1. FLA文件:这是Flash的源文件,包含了所有图形、动画和ActionScript代码,用于编辑和修改项目。 2. SWF文件:这是编译后的Flash影片,可以在Web浏览器中通过Flash Player插件运行。 3. AS文件:可能包含单独的...

    canvas如何实现多张图片编辑的图片编辑器

    3. **AS (ActionScript)**, **C** 和 **NV (NVIDIA)** 通常与编程语言或图形处理有关,但在这个上下文中,它们并未直接提及。不过,这里可能是指使用JavaScript进行图片编辑器的开发,而不是AS或C这样的传统编程语言...

    基于as3 stage3d 的基础2d渲染 练手的时候写的,跟opengl原理很像

    这篇内容将深入探讨基于ActionScript 3(AS3)的Stage3D技术,这是一种在Flash平台上实现高效2D渲染的框架,其工作原理与OpenGL相似,能够充分利用GPU(图形处理单元)的强大计算能力,为游戏和复杂交互式应用提供...

    Flash as3 Shell

    Shell的概念通常指的是操作系统中的命令解释器,因此在Flash AS3 Shell中,它可能是为用户提供了一种在Flash环境中模拟操作系统命令行操作的方式,或者创建了一个定制的工具集。 【标签】"Flash as3 Shell" 的标签...

    flex地图编辑,可以设置障碍

    Flex是一种基于ActionScript 3的开源框架,用于构建富互联网应用程序(RIA)。它提供了强大的图形渲染和用户界面组件,使得创建像“flex地图编辑”这样的工具成为可能。标题中的“flex地图编辑,可以设置障碍”暗示...

    3D随鼠标转动闹钟flash源码

    在`engine.as`中,可能定义了鼠标事件监听器,当鼠标移动时,会触发相应的函数,计算新的视角角度,并更新舞台上的3D对象,实现随鼠标转动的效果。 `3d_clock.fla`是Flash的工程文件,包含所有的图形、动画和动作...

    SWiSH_Max3_Repack

    1. **图形编辑器**:SWiSH Max3提供了一个直观的图形编辑环境,用户可以轻松绘制矢量图形、添加文本、导入图像以及调整各种形状和线条。它支持多种图形格式,如JPEG、PNG、GIF等。 2. **动画制作**:SWiSH Max3拥有...

    flash cs3人物行走

    在主时间轴上右键单击,选择“动作”以打开ActionScript编辑器。编写如下的AS3代码: ```actionscript var targetX:Number = stage.mouseX; var targetY:Number = stage.mouseY; var character:MovieClip = ...

    FLASH带预览图片播放器

    5. 测试和调试:在编辑器内预览播放器,检查是否正常工作,如果有问题,进行调试和修复。 6. 发布和集成:导出为SWF文件,然后将其嵌入到HTML页面中,或者根据项目需求进行其他形式的集成。 总的来说,"FLASH带预览...

    flash跳转代码可以修改

    `.fla`文件是Adobe Flash的专业编辑器Flash Professional创建的原始格式,包含所有的图形、动画以及ActionScript代码。以下是如何进行修改的步骤: 1. **打开Flash源文件**:首先,你需要使用Adobe Flash ...

    flash做的加载器

    Flash加载器(Loader)是Flash ActionScript 2或ActionScript 3中的一个关键组件,用于动态加载和显示各种类型的媒体内容,如SWF(ShockWave Flash)文件、图像(JPEG、PNG、GIF)、视频(FLV)等。 加载器的工作...

    AS3画板工具

    AS3画板工具是一款基于ActionScript 3(AS3)编程语言开发的交互式画板应用程序。AS3是Adobe Flash Professional和Flex Builder等工具的主要编程语言,它属于ECMAScript的一个版本,专为创建富互联网应用(RIA)和...

    zol flash 3屏焦点图代码VIEW1.zip

    CSS3是CSS的最新版本,提供了许多新的选择器、布局模式、动画和过渡效果,以及更强大的字体和颜色控制。在这个三屏焦点图中,CSS3可能用于设置元素的样式、实现平滑的动画效果、定义边框和背景的圆角、以及创建阴影...

    photoshop flex plugin

    7. **工具**:标签中的“工具”指的是Photoshop Flex Plugin为用户提供的额外工具,可能包括自定义图形编辑器、特效生成器或其他提高生产力的特性。 通过这个插件,设计师可以利用Flex的灵活性和Photoshop的强大...

Global site tag (gtag.js) - Google Analytics