2011年7月21日

Easy LightMeter 簡易測光表 Andrion APP 開發

去年我跟阿漢剛開始在玩120老相機,因為是老相機,所以沒有測光的功能,完全機械式的,於是阿漢就上網找了以前攝影用的測光表,雖然不像現在電子式的測光表這麼方便,但是這些iso對應的光圈快門數據,可都是先人智慧的結晶,的確都很準確,而且紙本又輕又不用電池,攜帶也方便,以下是阿漢做給我的紙本LightMeter(被我帶去爬玉山下雨弄濕了,都皺了XD)。
Camera 360
這是一個套桶式的紙本測光表,外層有天氣狀況可供選擇以及光圈值,底下(裡面)有一張iso值跟快門速度的紙可以左右拉動,iso值對應天氣狀況,就可以算出光圈跟快門值的數據該如何搭配,很簡單使用的一個好東西,但是自從我買了Desire之後,就一直有個想把這個測光表做成App的想法,於是就買了一本Android的書回家K,有些陣子又比較忙,就又放著沒看,一直到這幾個月adobe發佈了cs5.5可以用flash發佈成Android App,這個想法才又燃起了希望,昨天就馬上實做看看,果然用最熟悉的ActionScript還是最方便的,只有簡單拖拉的功能,馬上就能做出來了,原始碼如下。


package qoo

{


    import flash.desktop.NativeApplication;


    import flash.events.Event;


    import flash.display.Sprite;


    import flash.display.StageAlign;


    import flash.display.StageScaleMode;


    import flash.events.TouchEvent;


    import flash.geom.Rectangle;


    import flash.net.navigateToURL;


    import flash.net.URLRequest;


    import flash.text.engine.TypographicCase;


    import flash.ui.Multitouch;


    import flash.ui.MultitouchInputMode;


   
    /**


     * ...


     * @author ...Geometry Qoo


     */


    public class Main extends Sprite


    {


        private var bottom:Bottom;


        private var top:Top;


        private var closeBtn:CloseBtn;


        private var geoLogo:GeoLogo;


        private var titleLogo:Logo;


       
        public function Main():void


        {


            stage.scaleMode = StageScaleMode.NO_SCALE;


            stage.align = StageAlign.TOP_LEFT;


            //stage.addEventListener(Event.DEACTIVATE, deactivate);


           
            // touch or gesture?


            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;


            //mask


            var maskBox:Sprite = new Sprite();


            maskBox.graphics.beginFill(0xffffff);


            maskBox.graphics.drawRect(120, 234, 610, 92);


           
            titleLogo = new Logo();


            titleLogo.x = 270;


            titleLogo.y = 10;


            addChild(titleLogo);


           
            //關閉程式


            closeBtn = new CloseBtn();


            closeBtn.x = 760;


            closeBtn.y = 10;


            addChild(closeBtn);


            //logo


            geoLogo = new GeoLogo();


            geoLogo.x = 330;


            geoLogo.y = 400;


            addChild(geoLogo);


           
            //天氣EV對應表


            top = new Top();


            addChild(top);


            top.x = 25;


            top.y = 60;


            //iso & 快門值


            bottom = new Bottom();


            addChild(bottom);


            bottom.x = 70;


            bottom.y = 175;


           
            addChild(maskBox);


            bottom.mask = maskBox;


            //將要做移動的物件設定成bitmap


            bottom.cacheAsBitmap = true;


           
            stage.addEventListener(TouchEvent.TOUCH_BEGIN, beginHandler);


            closeBtn.addEventListener(TouchEvent.TOUCH_BEGIN, closeHandler);


            geoLogo.addEventListener(TouchEvent.TOUCH_BEGIN, logoHandler);


        }


        //連結至公司blog


        private function logoHandler(e:TouchEvent):void


        {


            navigateToURL(new URLRequest("http://blog.geometry.com.tw/"), "_blank");


        }


        //關閉程式


        private function closeHandler(e:TouchEvent):void


        {


            NativeApplication.nativeApplication.exit();


        }


        //觸控開始


        private function beginHandler(e:TouchEvent):void


        {


            stage.addEventListener(TouchEvent.TOUCH_MOVE, moveHandler);


            stage.addEventListener(TouchEvent.TOUCH_END, endHandler);


        }


        //移動


        private function moveHandler(e:TouchEvent):void


        {


            //trace("X:" + bottom.x);


            bottom.startDrag(false, new Rectangle(-480, 175, 944, 0));


        }


        //結束


        private function endHandler(e:TouchEvent):void


        {


            stage.removeEventListener(TouchEvent.TOUCH_MOVE, moveHandler);


            stage.removeEventListener(TouchEvent.TOUCH_END, endHandler);


            bottom.stopDrag();


        }


       
        private function deactivate(e:Event):void


        {


            // auto-close


            NativeApplication.nativeApplication.exit();


        }


       
    }


   
}


最終完成的APP畫面,跟紙本一樣,可以左右拖曳ISO值對應光圈與快門數據,雖然不像iphone那些神奇又好用的lightMeter APP,但是這個我個人覺得很好用,也很適合跟我的老相機搭配使用^^

device

4 則留言:

  1. 想請問版主是用甚麼程式(模擬)去撰寫!?

    我稍微有用過Eclipse寫過些小程式
    最近也在搜尋適當的測光程式!!!

    回覆刪除
    回覆
    1. 我是用Adobe的AIR發佈的...我也嘗試過用java開發,但是礙於熟悉度的關係,使用ActionScript開發,對我來說是最快速也最簡便的^^

      刪除
  2. 我剛剛在MARKET有找到此程式
    不過我的手機LEGEND 似乎無法安裝!!

    回覆刪除
    回覆
    1. 因為是跑AIR_runtime,而且AIR有硬體限制,我有試過有的可以裝,比較早期的手機就沒支援,我的手機是Desire,Android2.3系統...

      刪除