画面のキャプチャ
こんばんわ!最近、勉強がはかどらないhodoshimaです・・・。
定時に帰れるのに、家に帰るとゴロンとしてしまいます・・・。
勉強する習慣をつけなければ(>_<)
ちょっと前にやったことになってしまいますが、今回はFlexによる、画面のキャプチャについて書いてみたいと思います☆
画面のキャプチャとは、Ctrl+PrtScrで行うように、画面をコピーすることです!
この作業をFlexでActionScriptを用いて作ることができます!
いきなりソースだけを書いてしまいますと・・・
ActionScriptファイル(Test.as)
var scimg:Image = new Image(); //mxmlで書いたviewのことです var view:TestView; /** *画面キャプチャメソッド **/ public function doCapture ():void { var screen:BitmapData = new BitmapData(this.view.width,this.view.height); //viewをBitmapData型オブジェクトに書き出す(画面のキャプチャ) screen.draw(UIComponent(this.view)); //BitmapData型をBitmap型でラップする var bmp:Bitmap = new Bitmap(screen); //キャプチャした画面を半分に縮小(横) bmp.scaleX = 0.5; //キャプチャした画面を半分に縮小(縦) bmp.scaleY = 0.5; //印刷するイベントdoPrintの登録 scimg.addEventListener("added",doPrint); //Image型のオブジェクトにBitmap型のオブジェクトをいれる scimg.addChild(bmp); } /** *キャプチャした画面の印刷 **/ private function doPrint(event:Event):void { var pj:PrintJob = new PrintJob(); if(pj.start()) { pj.addPage(scimg); pj.send(); } }
次にこのソースの意味を説明します!
●BitmapData
BitmapDataオブジェクトは数値データなので、画像化するためにはこのBitmapDataオブジェクトをBitmapオブジェクトでラップする。
●draw
Flash Player のベクターレンダラを使用して、source 表示オブジェクトをビットマップイメージ上に描画します。BitmapDataのメソッド。
これを使うことで、指定した画像をBitmapDataとして描画することができる。
●UICompornent
id, left, widthなど、mxmlで使用されるコンポーネントの親的なクラス。これらのコンポーネントはすべてUICompornentを継承して作られている。
UICompornet(this.view)と書くと、mxmlで書かれているviewのことを指す。
●Image
実行時に、JPEG、PNG、GIF、および SWF のファイルを読み込むために用いるクラス。
●ScalXとScalY
画面をそのまま縮小、拡大する。0.5は半分に縮小、1はサイズを変更しない。
キャプチャした画面を印刷してみたところ、なぜかパソコンの画面からはみ出してしまう程大きかったので、
ScalXとScalYで半分に縮小してみたのですが、Bitmap画像であるために、画像が粗くなってしまいました。
そこで、Bitmapクラスのコンストラクタに引数として割り当てられている、pixelSnappingとsmoothingを使ってみました。
こんな風にBitmapクラスのコンストラクタには3つの引数があります。
Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false)
これを使ってさっき上で書いたソースをいじくり・・・
var pixelSnapping:String = "auto"; var smoothing:Boolean = false; //BitmapData型をBitmap型にする var bmp:Bitmap = new Bitmap(screen, pixelSnapping, smoothing);
このように書くことで粗くなった画像は滑らかになると参考サイトには書かれていたのですが、
粗いまま解消できませんでした(>_<)
(参考サイトhttp://livedocs.adobe.com/flex/2_jp/langref/flash/display/Bitmap.html)
どなたか解消法を知っている方がいらっしゃったら、教えて下さい!