zoukankan      html  css  js  c++  java
  • Flash Actionscript 多线程Worker 压缩图片

    package
    {
            import flash.display.Bitmap;
            import flash.display.Sprite;
            import flash.events.Event;
            import flash.external.ExternalInterface;
            import flash.geom.Rectangle;
            import flash.system.MessageChannel;
            import flash.system.Worker;
            import flash.system.WorkerDomain;
            import flash.utils.ByteArray;public class WorkerTest extends Sprite
           {
                   protected var mainToWorker:MessageChannel;
                   protected var workerToMain:MessageChannel;
                  
                   protected var worker:Worker;
                  
                  [ Embed(source= "1.jpg")]
                   public var Image1:Class;
                  
                   public function WorkerTest()
                  {
                          /**
                          * Start Main thread
                          **/
                          if(Worker.current.isPrimordial){
                                //Create worker from our own loaderInfo.bytes
                               worker = WorkerDomain.current.createWorker(this.loaderInfo.bytes);
                               
                                //Create messaging channels for 2-way messaging
                               mainToWorker = Worker.current.createMessageChannel(worker);
                               workerToMain = worker.createMessageChannel(Worker.current);
                               
                                var byteArray:ByteArray = Bitmap(new Image1()).bitmapData.getPixels(new Rectangle(0,0,300,300));
                               byteArray. shareable = true;        //使bytearray可以在两个线程中使用
                               
                                //Inject messaging channels as a shared property
                               worker.setSharedProperty( "data", byteArray);
                               
                                //Listen to the response from our worker
                               workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain);
                               
                                //Start worker (re-run document class)
                               worker.start();
                               
                         }
                          /**
                          * Start Worker thread
                          **/
                          else {
                               
                                //Inside of our worker, we can use static methods to
                                //access the shared messgaeChannel's
                                var data:ByteArray = Worker.current.getSharedProperty( "data");
                               workerToMain = Worker.current.getSharedProperty( "workerToMain" );
                               
                    //这里可以做一些压缩的工作
                    data.compress(); workerToMain.send(data);  //只要byteArray是shareable的,可以直接send
    } } //Messages to the worker thread protected function onWorkerToMain(event:Event): void { //Trace out whatever message the worker has sent us. var a:* = workerToMain.receive(); trace("[Worker] " + a); ExternalInterface.call( "alert", a); //debug版Flashbuilder4.6运行会收不到消息,但release版或断开debug连接就没问题 } } }
  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/kenkofox/p/3892900.html
Copyright © 2011-2022 走看看