- ベストアンサー
外部ファイルを読み込んでロスレスにする
外部ファイルを読み込んでロスレスで表示する方法はありませんか? frame_mc.loadMovie("image.png"); といったような形で外部image.pngを読み込ませロスレス表示する、といったぐあいです。 どなたかわかる方ご教授ください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
根本的に意味がさっぱりわからないというのが,正直なところですが, 一応回答します。 Flash で使われる ロスレス は, 一般的にはビットマップ画像をSWF内にコンパイルするときに使う圧縮に関することですから, loadMovieする場合は全くこれとは関係ありませんね。 (圧縮してもしなくても,SWF上にロードされるファイル容量に変わりはないので受け手であるFlashPlayerで圧縮しても意味がない。) また, ムービークリップ や _root の _quality プロパティが, "LOW" であっても,"BEST" であってもこの場合は関係ありません。 つまり, 外部ビットマップ画像をロードした場合は, 基本的に圧縮されることもありません。 また,ペクトルではないので, 表示上アンチエイリアスみたいなものがかかるかからないは関係ありません。 「画像そのもの」,「画像そのまま」を表示すると思います。 「画像そのもの」,「画像そのまま」というのは, IE などブラウザに直接表示させたときとほぼ同じように見えるということです。 frame_mc.loadMovie("image.png"); で読み込んだ 「image.png」 が, 拡大も縮小もさせずに元の絵から劣化するということでしょうか? そういう経験は一切ないのでわかりませんが。 ================== 以下は私の勝手な推測です。 ご質問は,ロスレス とかそういうことではなくて, 「image.png」 をロードしたものを "拡大縮小させたとき" に, エッジのギザギザが目立たないように「スムージング」をかけて表示させたいということではないかと思います。 あくまでも私が勝手に思うだけです。 「image.png」 をロードしたものを拡大縮小させたときに, エッジのギザギザが目立たないように「スムージング」をかけるには次のような方法をとります。 frame_mc.loadMovie("image.png"); を消して, それを書かれた同じフレームに書くスクリプトです。 ----------------------------------------- // display クラス をインポート import flash.display.*; // ロード用のダミーMCを見えない座標に作成 var dummy:MovieClip = this.createEmptyMovieClip("dmy_mc", this.getNextHighestDepth()); dummy._x = 10000; // MovieClipLoader クラスのインスタンスを作成 var MCL:MovieClipLoader = new MovieClipLoader(); // ロード監視用のオブジェクトを作成 var OBJ:Object = new Object(); // 画像ロード完了時の動作定義 OBJ.onLoadInit = function(Target:MovieClip):Void { // 背景色透明のBitmapDataインスタンス BMD を作成 var BMD:BitmapData = new BitmapData(Target._width, Target._height, true, 0); // BMD に ターゲットMC(ロード用のダミーMC) を写し取る BMD.draw(Target); // ターゲットMC(ロード用のダミーMC)は要らないので削除 Target.removeMovieClip(); // frame_mc の深度 0 にスムージング true で BMD を呼びだす frame_mc.attachBitmap(BMD, 0, "auto", true); }; // MCL のリスナーとして OBJ を登録 MCL.addListener(OBJ); // 「image.png」 を dummy をターゲットとしてロード MCL.loadClip("image.png", dummy); ------------------------------------------- こうした場合, 外部からロードした画像であっても, 拡大/縮小/回転 などのときに画像にスムージングがかかります。 スムージングがかかると言ってもFlashPlayer は再生専用ソフトであって画像処理ソフトではないので, Photoshop など,画像処理ソフトなどの演算にはかないません。 ほんの少しシャギるのがごまかせる程度です。 ご質問には肝腎な Flash のバージョンなどが抜けていますが, 外部画像として 「image.png」 などPNGがロード表示できるようになったのは,Flash8以降(FlashPlayer8以降)です。 また loadMovie は ActionScript2.0 以下で使用できます。 したがって, お持ちのFlashのバージョンは Flash 8 または CS3 で, ActionScript2.0 以下を使用している状態であるということがわかります。 上のスクリプトも, SWF のパブリッシュ設定 FlashPlayer8 以上, ActionScript のバージョンを ActionScript2.0 に設定しておくという条件で初めて動作するスクリプトです。 以上, ロスレスに関する勝手な推測が間違っていたらすみません。
お礼
コナンドイルのシャーロックホームズを読んでいる気になりました。 特に「緋色の研究」で事件現場から出てきたあとホームズが「犯人は赤ら顔をしている」と推測するところのシーンが思い出されました。 完全におっしゃられる通りのことでございます。 Flashのバージョンは Flash 8 、ActionScript2.0でございます。 スムージングというのですか。知りませんでした。 そして挙げられたスクリプトも挑戦してみます。 それでも出来なかった場合はまたここへ質問を立ててみます。 ありがとうございます!!
補足
ありがとうございました。 かなり使えております。 感謝です!!!