忍者ブログ
[28]  [27]  [26]  [25]  [24]  [23]  [22]  [21]  [20]  [19]  [18
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

例のアレ、ようやくカタチになったのだけど、不安なところが(今のところ)ひとつ。

JPGEncoderはencodeメソッドひとつでBitmapDataがBytesArrayになる簡便さがある反面、エンコード最中は他のメソッドが一切実行できなくなります。Flex GUIのエフェクトやアニメーションなども停止するので、メガピクセル超の画像をエンコードする際などは、非常に不安な気持ちで数秒~十数秒待たされることになります。
フリーズじゃないかと疑われてしまうのではないか、と。
苦し紛れにProgressBarなどを表示させてみましたが(進捗情報が得られないので漫然とバーが動くだけ)、そのアニメーションすら停止するので、フリーズの不安を和らげる効果がありません。



スレッド(そうめん)を使えばあるいは?と思ったけども、処理時間を食ってるJPGEncoder.encode()そのものに手を加えない限り意味がなさそうです。(そもそも、まだスレッドというものを理解していない)。

で、JPGEncoderに手を加えようと思うた次第です。つまりIEventDispatcherを実装させて、progressとcompleteぐらいは送出させるようにしたい。して欲しい。
ある条件を満足したときにProgressEventをdispatchさせて、同時にtimerで1msecくらい処理を中断させればいいのかな。問題はprogressの発生条件を如何するか。

ざっと見たところ、JPGEncoderのencodeメソッド内では8x8のブロックに区切って変換をしているようだ。
例えば壁紙サイズ 1920x1280だったらば、38400回の変換操作が行われる。
変換1回につき進捗報告を行うと、Timerを1msecに設定しても待機時間だけで38秒になってしまう。
なので、方法としては
    ・N回の変換毎にProgressEventを送出して Timer開始&待機
    ・全体のP% 終了ごとに以下略
が考えられるかな。

前者では画素数に応じて総待機時間も変化する。逆に進捗報告間隔は一定。
後者では画素数に因らず総待機時間は一定。

どちらがいいのか、2つ実装して試してみよう。何かできそうな気がしてきた。

続く。

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
26歳のハローワールド
カレンダー
06 2025/07 08
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
最新コメント
[11/27 gyzwviyehl]
[11/18 Tepexaxyonelo]
[09/12 gomFolley]
[08/16 CypeBachCoece]
[06/02 gb]
[03/06 kishima]
[01/18 KNDY]
[01/16 kage]
[12/23 KNDY]
[12/23 kage]
最新トラックバック
ブログ内検索
アクセス解析
プロフィール
HN:
knd
HP:
自己紹介:
絶賛迷走中。
UNIQLO CALENDAR
忍者ブログ [PR]