MDM Zincを使用して画像をAdobe Flash Playerからディスクに保存する

こんにちはハブラ



少しの背景。 それはすべて、通常のFlashサイトから始まりました。最大の機能は、ボタンを押すことでテキストを含むウィンドウを開くことでした。 それから、回転する銃口でフィールドの周りを回転するタンクの形で最初のゲームがあり、最初のMMORPGがありました。 その後、仕事に就いたところで、MMORPGは私が必要とするものではないことに気付き、全員でPC用のゲームをリリースすることにしました。 ディスクでは、美しい箱の中に、すべてが本来あるべき姿です。



選択するプログラミング言語は何ですか? 一緒に唱えられた:「C、C、C」。 「BUT」が1つでなければ、すべては問題ありません(この「but」は作業開始直前に知られるようになりました)。 同じバージョンのゲームは、サイト上で、多くの訪問者とHTMLで接続されたオンラインであるはずでした(MMORPGの放棄について私が言ったことを覚えていますか?はい、shchaz!)。 友人をHTMLまたはPHPの拡張子.EXEのファイルにする方法は誰にも起こりませんでした。 これを行うことが決定されました。PCの場合、ActionScript(すべて2.0)ですべてを記述し、Builderのコンポーネントを使用してシェルでラップし、Webの場合、SWFファイルをHTMLコードでラップします。 そして、すべてうまくいきました。 Webバージョンは必要ありませんでした。ゲームの本格的なPCバージョンはActionScript 2.0で作成されました。 アーティストにとって絵を描くのは便利で、フラッシュプログラマーとして私たちは幸せです。



ポイントを取得します。 このゲームは進化しました。 現在までに、9つのバージョンがリリースされ、正常に販売され、それに応じて購入されています。 ゲームの新しいバージョンごとに機能が向上し、その瞬間にキャラクターの現在の画像を取得してディスクに保存する必要がある状況になりました。 ここにいる。 フラッシュをディスクに保存できるものは何ですか? -テキストデータを含む悲惨なSharedObject。 そして、ここでは冗談を言う時間はありません。 ここでは画像を扱っています。 あなたはJPEGとあなたが好きなものを必要とします、それをしますが、私にそれを保存してください。 まず、バイト配列が形成され、fscommandを使用してシェルに送信され、シェルはそれを解析し、イメージを形成してディスクに保存しましたか? 便利ですか? -もちろんありません。 何かを再構成するために、コード全体を根本的に変更する必要がありました。



そして、この事件により、MultidmediaからMDM Zincにプッシュされました。 Windows、Linux、MacOSの両方のデスクトップアプリケーションを作成するための優れたツール。 フラッシュドライブをロードすると、デスクトップアプリケーションの準備が整います。 EXE-schnick、組み込みのFlash PlayerとWindowsのすべての機能で動作する巨大な機能を備えています。 少なくともレジストリ、少なくともファイルシステムに移動します。



亜鉛は基本的にインストールされます。 実際には何もする必要はありません(拡張機能マネージャーを使用して拡張機能をインストールする方法を除く)。 そして、思考の範囲は巨大です。 それで、私は(私がそれを呼んだように)ゆっくりとImageSaverを始めました。 最初にそうすることにしました。 アプリケーションを開き、画像のあるファイルを選択してシェルにロードし、ムービーの必要な部分を撮影して、画像をディスクに保存します。 まず、映画(映画)を作成します。



Flashムービーの内容を確認します



イメージダウンローダーの空のクリップに名前(インスタンス名) -mc_loaderを付けます。 スキャナークリップ(青い透明な長方形)に名前を付けます-imageScanner 。 ムービーの[ドキュメントクラス]パラメーター([プロパティ]タブ)として、セーバーを指定します。 クラスは、ムービーおよびアプリケーションと同じフォルダーになければなりません。 Zincコンポーネントをムービーライブラリにドロップします。



次に、セーバーコードを記述します。



/**

* @author DaFive

* mailto, gtalk: dafive.get@gmail.com

* icq: 163-092-469

*

* ImageSaver class. Interaction with MDM.Zinc.

*

* */



package {



import flash.display.Loader;

import flash.display.Sprite;

import flash.events.MouseEvent;

import flash.display.MovieClip;

import flash.net.URLRequest;

import flash.utils.Timer;

import flash.events.TimerEvent;

import flash.events.Event;



import mdm.*;



public class Saver extends Sprite

{



//

private var TIMER:Timer;

//

private var TIME: int = 0;



//

var myAppPath:String;



public function Saver(): void

{

//!! init mdm-.

mdm.Application.init( this , onInit);

}



// Zinc

public function onInit(): void

{

myAppPath = mdm.Application.path;



//

mdm.Application.bringToFront();



//

var myFilePath:String = mdm.Dialogs.BrowseFile.show();



mdm.Dialogs.prompt(myFilePath);



//

var myLoader:Loader = new Loader();

var requestPhoto:URLRequest = new URLRequest(myFilePath);



myLoader.load(requestPhoto);



mc_loader.addChild(myLoader);



myLoader.contentLoaderInfo.addEventListener(Event.INIT, initPhoto, false , 0, true );





imageScanner.addEventListener(MouseEvent.MOUSE_DOWN, onScannerPress, false , 0, true );

imageScanner.addEventListener(MouseEvent.MOUSE_UP, onScannerRelease, false , 0, true );



imageScanner.buttonMode = true ;



save_btn.addEventListener(MouseEvent.CLICK, onSave, false , 0, true );

}



//

private function initPhoto(e:Event): void

{

mdm.Dialogs.prompt ( "" );

}



//

private function onSave(e:MouseEvent): void

{

save_btn.removeEventListener(MouseEvent.CLICK, onSave);



imageScanner.alpha = 0;



TIMER = new Timer(1000, 0);

TIMER.start();

TIMER.addEventListener(TimerEvent.TIMER, onTimer, false , 0, true );

}



// , ,

private function onTimer(e:TimerEvent): void

{

TIME ++;



if (TIME == 1)

{

var rnd_val:Number = Math.random();



mdm.Image.ScreenCapture.movieAreaToBmp(imageScanner.x, imageScanner.y, imageScanner.width, imageScanner.height, myAppPath+ "\\shot_" + rnd_val + ".bmp" );



mdm.Image.bmpToJpg(myAppPath+ "\\shot_" + rnd_val + ".bmp" );



mdm.FileSystem.deleteFile(myAppPath+ "\\shot_" + rnd_val + ".bmp" );



TIMER.stop();

TIMER.reset();

TIMER.removeEventListener(TimerEvent.TIMER, onTimer);



TIME = 0;



save_btn.addEventListener(MouseEvent.CLICK, onSave, false , 0, true );



imageScanner.alpha = 1;

}

}



//

private function onScannerPress(e:MouseEvent): void

{

e.currentTarget.startDrag( false );

}



//

private function onScannerRelease(e:MouseEvent): void

{

e.currentTarget.stopDrag();

}

}

}




* This source code was highlighted with Source Code Highlighter .








最も重要なことは、SaverクラスのコンストラクターでMDMアプリケーション初期化関数を呼び出すことです。 これがないと、ActionScriptの3番目のバージョンでは何も機能しません。 2番目に動作しますが、ここでは動作しません。



ご覧のように、スキャナーには(LMBをクリックして)ドラッグプロパティと(LMBを解放するときに)ドロッププロパティが割り当てられています。 つまり、画像の目的の部分にドラッグできます。 スキャナーのサイズは固定されていますが、簡単に変更できます。



「保存」ボタンを押すと、タイマーが1秒で開始します。 タイマーなしでそれを行うと、透明な長方形が保持されます。 私たちはそれを隠しています。 ここにあります。 Zincは、JPG内の目的の座標から目的の画像をすぐに保存する方法を知りません。 しかし、彼はBMPで保存してJPGに変換することができます。 これはif(TIME == 1)の後に行います。



ファイルにはランダムに名前が付けられます(特に、いくつかの画像オプションを保存して、それらをこすらないようにするために作成されます)。 ファイルは、アプリケーション自体のあるフォルダーに保存されます(myAppPathが役立ちます)。 次に、BMPからJPG(mdm.Image.bmpToJpg)への変換と、その後の不要なBMPファイルの削除が行われます。



接続するために必要な亜鉛拡張機能は何ですか?



プロジェクトを構築すると何が得られますか?



スキャナーをどのように向けますか?



保存した画像



誰かが役に立つといいな。 その場合、scられないでください。 私の最初のトピック。



All Articles