WebページキャプチャーなAIRなアプリを作ったよ\(゜ロ\)(/ロ゜)/

ちょっと手軽にWebページをキャプチャーしたりクリップボードの画像をキャプチャーしたりできるAIRなアプリを作ってみました。
部分保存も対応しています。
お試しはこちらから

動作ムービーはこちら

クリップボードから画像を取り出す方法

var g:Clipboard = Clipboard.generalClipboard;
//画像じゃない場合はエラー
if( !g.hasFormat( ClipboardFormats.BITMAP_FORMAT)){
    mx.controls.Alert.show("クリップボードに画像がないよ!");
}
//画像の描画
var bd2:BitmapData;
bd2 = g.getData( ClipboardFormats.BITMAP_FORMAT ) as BitmapData;
myImage2.source = new Bitmap( bd2 );

いろいろとバグありですが、こういったアプリができるってことで。
ソースコードはこちら

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"
    xmlns:local="*" backgroundAlpha="1" backgroundColor="0xffccff"
    width="884" height="900" xmlns:objecthandles="com.roguedevelopment.objecthandles.*" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.graphics.codec.PNGEncoder;
//画像保存用
private var bd:BitmapData;
//初期化関数
private function init():void{
}
//ページ丸ごと保存
private function getPage():void{
    var w:int;
    var h:int;
    if( radiogroup1.selectedValue == "0" ){
        //Web画像を保存
        w = int(myHtmlW.text);
        h = int(myHtmlH.text);
        bd = new BitmapData( w , h );
        bd.draw( myHtml );
    }else{
        //クリップ画像を保存
        w = myImage2.width;
        h = myImage2.height;
        bd = new BitmapData( w , h );
        bd.draw( myImage2 );
    }
    //書き出し用画像表示
    myImage.source = new Bitmap( bd );
    //保存ボタン有効
    mySaveBtn.enabled = true;
    finishTxt.visible = false;
}
//部分保存
private function getCap():void{
    //画像用意
    var w:int = myTest.width;
    var h:int = myTest.height;
    bd = new BitmapData( w , h );
    //部分画像なので場所やサイズを利用
    var rec:Rectangle = new Rectangle();
    rec.width = w;
    rec.height = h;
    var mat:Matrix = new Matrix();
    mat.tx = -myTest.x;
    mat.ty = -myTest.y;
//    mat.scale(mySlider.value,mySlider.value);
//    mat.a = mySlider.value;
//    mat.d = mySlider.value;
    if( radiogroup1.selectedValue == "0" ){
        //Web画像を保存
        bd.draw( myHtml , mat , null , null , rec );
    }else{
        //クリップ画像を保存
        bd.draw( myImage2 , mat , null , null , rec );
    }
    //書き出し用画像表示
    myImage.source = new Bitmap( bd );
    //保存ボタン有効
    mySaveBtn.enabled = true;
    finishTxt.visible = false;
}
//画像をフィル保存
private function saveImage():void{
    //ファイル名を決める
    var fname:String = new String();
    var d:Date = new Date();
    fname = "" + d.getFullYear() + "年"+(d.getMonth()+1) + "月"+d.getDay()+"日"+d.getHours() +"時"+ d.getMinutes() + "分" + d.getSeconds() + "秒.png";
    //ファイル保存
    var png:PNGEncoder = new PNGEncoder();
    var bta:ByteArray = png.encode(bd);
    var save_file:File = File.desktopDirectory;
    save_file = save_file.resolvePath(fname);
    var fs:FileStream = new FileStream();
    fs.open(save_file,FileMode.UPDATE);
    fs.writeBytes(bta, 0, bta.length);
    fs.close();
    //保存されたので保存ボタン無効
    mySaveBtn.enabled = false;
    finishTxt.visible = true;
}
//クリップボードから画像をゲット
private function getClipbord():void{
    var g:Clipboard = Clipboard.generalClipboard;
    //画像じゃない場合はエラー
    if( !g.hasFormat( ClipboardFormats.BITMAP_FORMAT)){
        mx.controls.Alert.show("クリップボードに画像がないよ!");
    }
    //画像の描画
    var bd2:BitmapData;
    bd2 = g.getData( ClipboardFormats.BITMAP_FORMAT ) as BitmapData;
    myImage2.source = new Bitmap( bd2 );
}
]]>
</mx:Script>
<mx:Style>
ApplicationControlBar {
   highlightAlphas: 1, 0.3;
   fillAlphas: 0.64, 0.24;
   fillColors: #ffffff, #cc00ff;
   backgroundAlpha: 0.67;
   cornerRadius: 5;
   dropShadowEnabled: true;
   shadowDistance: 1;
}
</mx:Style>
<!--取得画像表示-->
<mx:Label x="10" y="202" text="{radiogroup1.selection.label}" fontSize="20"/>
<mx:Button x="83" y="207" label="←" click="{myHtml.historyBack()}" visible="{!Boolean(radiogroup1.selectedValue)}"/>
<mx:Button x="131" y="207" label="→" click="{myHtml.historyForward()}" visible="{!Boolean(radiogroup1.selectedValue)}"/>
<mx:Image id="myImage2" x="10" y="241"  visible="{Boolean(radiogroup1.selectedValue)}"
    />
<mx:Canvas x="10" y="241" height="{int(myHtmlH.text)}" width="{int(myHtmlW.text)}">
    <mx:HTML id="myHtml" x="2.5" y="1" width="100%" height="100%"  visible="{!Boolean(radiogroup1.selectedValue)}"
        verticalScrollPolicy="off" horizontalScrollPolicy="off"/>
    <objecthandles:ObjectHandles id="myTest" allowHResize="false" allowVResize="false" allowHMove="true"
        borderStyle="solid" borderThickness="2" borderColor="0xff0000"
        height="{int(myTestH.text)}" width="{int(myTestW.text)}" visible="{myTestV.selected}">
        <mx:Canvas backgroundColor="0xff0000" alpha="0.3" width="100%" height="100%" />
    </objecthandles:ObjectHandles>
</mx:Canvas>
<!--画像元オプション-->
<mx:RadioButtonGroup id="radiogroup1"/>
<mx:ViewStack x="11" y="48" id="viewstack1" width="378" height="150" selectedIndex="{int(radiogroup1.selectedValue)}" backgroundColor="0xe1ffe6">
    <mx:Canvas label="web" width="100%" height="100%">
        <mx:Label x="27" y="46" text="URL"/>
        <mx:Label x="27" y="72" text="縦横サイズ"/>
        <mx:TextInput id="myUrlTxt" x="127" y="44" width="188" text="http://google.co.jp" enter="{myHtml.location=myUrlTxt.text}" />
        <mx:TextInput id="myHtmlH" x="127" y="70" width="64" text="600"/>
        <mx:TextInput id="myHtmlW" x="218" y="70" width="64" text="800"/>
        <mx:Label x="199" y="72" text="x"/>
        <mx:Button x="323" y="44" label="GO" click="{myHtml.location=myUrlTxt.text}"/>
    </mx:Canvas>
    <mx:Canvas label="clip" width="100%" height="100%">
        <mx:Button x="111.5" y="59" label="クリップボードから読み込み" click="getClipbord()"/>
    </mx:Canvas>
</mx:ViewStack>
<!--キャプチャーオプション-->
<mx:RadioButtonGroup id="radiogroup2"/>
<mx:ViewStack x="400" y="49" id="viewstack2" width="257" height="150" selectedIndex="{int(radiogroup2.selectedValue)}" backgroundColor="0xfff6db">
    <mx:Canvas label="ビュー 1" width="100%" height="100%">
        <mx:Button id="myButton0" x="75.5" y="59" label="ページキャプチャ" click="getPage()"/>
    </mx:Canvas>
    <mx:Canvas label="a" width="100%" height="100%">
        <mx:Button id="myButton" x="81.5" y="92" label="部分キャプチャー" click="getCap()"/>
        <mx:TextInput id="myTestH" x="81.5" y="23" width="64" text="200"/>
        <mx:TextInput id="myTestW" x="172.5" y="23" width="64" text="300"/>
        <mx:Label x="153.5" y="25" text="x"/>
        <mx:Label x="20.5" y="25" text="縦横サイズ"/>
        <mx:CheckBox id="myTestV" x="81.5" y="53" label="表示" selected="false"/>
    </mx:Canvas>
</mx:ViewStack>
<!--画像保存-->
<mx:Canvas x="667" y="49" width="188" height="150" backgroundColor="0xe1e3ff">
    <mx:Image id="myImage" x="10" y="10" width="129" height="100"/>
    <mx:Button id="mySaveBtn" label="画像保存" enabled="false" click="saveImage()" x="108" y="118"/>
    <mx:TextInput id="finishTxt" x="46" y="119" text="保存完了!" visible="false" width="55" />
</mx:Canvas>
<!--アプリケーションコントロールバー-->
<mx:ApplicationControlBar x="10" y="11" width="382">
    <mx:RadioButton label="Web" value="0" groupName="radiogroup1" selected="true"/>
    <mx:RadioButton label="クリップボードから" value="1" groupName="radiogroup1"/>
</mx:ApplicationControlBar>
<mx:ApplicationControlBar x="400" y="11" width="259">
    <mx:RadioButton label="丸ごとキャプチャ" value="0" groupName="radiogroup2" selected="true"/>
    <mx:RadioButton label="部分キャプタ" value="1" groupName="radiogroup2"/>
</mx:ApplicationControlBar>
<mx:ApplicationControlBar x="667" y="11" width="188" barColor="0x46458a" height="33">
    <mx:Label text="出力画像"/>
</mx:ApplicationControlBar>
</mx:WindowedApplication>

クリップボードやファイル出力関係はこちらが便利

Adobe AIRプロフェッショナルガイド Windows & Macintosh対応

Adobe AIRプロフェッショナルガイド Windows & Macintosh対応