×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
BitmapData.getPixelsメソッドの戻り値はByteArrayなので、使いどころが難しいと思ってたんですが、やってみると意外や、ByteArray.readByteで順にARGBのチャネルが取り出せてラクだったりして。気持ち負荷も小さい気がする(あくまで気持ち)。
PR
会社の貸与PCにとうとうEclipse入れてまった。もう後には引けない・・・!と言いつつも、ASは楽しすぎるのでSJC-Pの受験勉強は一向に進みません。
さて、今日は2つのARGBカラーの中間の値を求める方法を考えていました。
さて、今日は2つのARGBカラーの中間の値を求める方法を考えていました。
一部ソフトっていうか、SAIで開けなかったんだけどね。
とりあえず改造を施していない標準のJPEGEncoderから出力したjpegファイルはSAIで開けた。
ということは僕が改造したことが原因であるのだろう。
で、その開けないほうのjpegをこのソフトを使って解析したところ、「EOI(End Of Image) ワードが無い」と出た。標準ライブラリが出力したファイルにはEOIが書き込まれているらしいので、ほぼ間違いなくこれが原因。
早速改造した方(あまり凝らずにJPEGEncoder2とした)を確認する。
結論から言うと、
なんでなん?リスナー関数はスレッドみたいに割り込めてしまうん?
とりあえず解決。
とりあえず改造を施していない標準のJPEGEncoderから出力したjpegファイルはSAIで開けた。
ということは僕が改造したことが原因であるのだろう。
で、その開けないほうのjpegをこのソフトを使って解析したところ、「EOI(End Of Image) ワードが無い」と出た。標準ライブラリが出力したファイルにはEOIが書き込まれているらしいので、ほぼ間違いなくこれが原因。
早速改造した方(あまり凝らずにJPEGEncoder2とした)を確認する。
結論から言うと、
dispatcher.dispatchEvent(new Event(Event.COMPLETE)); writeWord(0xFFD9); //EOI書き込み break;//エンコード終了こうなっていたのを
writeWord(0xFFD9); //EOI書き込み dispatcher.dispatchEvent(new Event(Event.COMPLETE)); break;//エンコード終了こうしたらEOIが書き込まれるようになった。 確かに上のソースだけを見ると、呼び出し側のコンプリートエヴェントのリスナー関数が、EOIをまだ書き込んでないByteArrayを読み込みそうに見えなくもないけども、やっぱり納得がいかない。
なんでなん?リスナー関数はスレッドみたいに割り込めてしまうん?
とりあえず解決。
com.adobe.images.JPGEncoder はFlexの標準ライブラリではないものの、adobe謹製ということで広く使われておったようですが、いつの間にかFlexの標準ライブラリに mx.graphics.code.JPEGEncoder というクラスが加えられていました。
これは mx.graphics.code.IImageEncoder というインタフェースを実装したクラスなんだけども、ソースを見るにアルゴリズムや入ってるコメントには大きな違いは無い模様。ですが、何らかの最適化がなされているのかも?という期待が無いことも無いです。
じゃあ、こっちのアルゴリズムでもイベントを送出するように改造したろうかなぁ。
あ、でも encode() の戻り型がByteArrayじゃなくなるから IImageEncoder は実装出来なくなるね。IImageEncodingDispatcher とか作ればいいのかなあ。いや、いらねぇなあ。
そういえばPNGEncoderも進捗イベントを送出するように改造しようと思ったこともあるんだけども、ソースを見るに、ByteArray.compress()という見慣れないメソッドが使われていた。標準のバイト配列の圧縮処理を利用しているらしい。巨大画像のエンコードで時間を喰うとしたらおそらくはコレだろうから、断念・撤退したのだった。
これは mx.graphics.code.IImageEncoder というインタフェースを実装したクラスなんだけども、ソースを見るにアルゴリズムや入ってるコメントには大きな違いは無い模様。ですが、何らかの最適化がなされているのかも?という期待が無いことも無いです。
じゃあ、こっちのアルゴリズムでもイベントを送出するように改造したろうかなぁ。
あ、でも encode() の戻り型がByteArrayじゃなくなるから IImageEncoder は実装出来なくなるね。IImageEncodingDispatcher とか作ればいいのかなあ。いや、いらねぇなあ。
そういえばPNGEncoderも進捗イベントを送出するように改造しようと思ったこともあるんだけども、ソースを見るに、ByteArray.compress()という見慣れないメソッドが使われていた。標準のバイト配列の圧縮処理を利用しているらしい。巨大画像のエンコードで時間を喰うとしたらおそらくはコレだろうから、断念・撤退したのだった。
例のアレ、ようやくカタチになったのだけど、不安なところが(今のところ)ひとつ。
JPGEncoderはencodeメソッドひとつでBitmapDataがBytesArrayになる簡便さがある反面、エンコード最中は他のメソッドが一切実行できなくなります。Flex GUIのエフェクトやアニメーションなども停止するので、メガピクセル超の画像をエンコードする際などは、非常に不安な気持ちで数秒~十数秒待たされることになります。
フリーズじゃないかと疑われてしまうのではないか、と。
苦し紛れにProgressBarなどを表示させてみましたが(進捗情報が得られないので漫然とバーが動くだけ)、そのアニメーションすら停止するので、フリーズの不安を和らげる効果がありません。
JPGEncoderはencodeメソッドひとつでBitmapDataがBytesArrayになる簡便さがある反面、エンコード最中は他のメソッドが一切実行できなくなります。Flex GUIのエフェクトやアニメーションなども停止するので、メガピクセル超の画像をエンコードする際などは、非常に不安な気持ちで数秒~十数秒待たされることになります。
フリーズじゃないかと疑われてしまうのではないか、と。
苦し紛れにProgressBarなどを表示させてみましたが(進捗情報が得られないので漫然とバーが動くだけ)、そのアニメーションすら停止するので、フリーズの不安を和らげる効果がありません。
26歳のハローワールド
カレンダー
04 | 2024/05 | 06 |
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 |
最新記事
(05/23)
(05/11)
(05/09)
(05/08)
(05/08)
(03/07)
(02/25)
(02/07)
(02/07)
(01/28)
最新コメント
[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]
最新トラックバック
カテゴリー
アーカイブ
ブログ内検索
アクセス解析