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対応
- 作者: クジラ飛行机
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/06/25
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 74回
- この商品を含むブログ (18件) を見る