忍者ブログ
[1]  [2]  [3]  [4]  [5
×

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


BitmapData.getPixelsメソッドの戻り値はByteArrayなので、使いどころが難しいと思ってたんですが、やってみると意外や、ByteArray.readByteで順にARGBのチャネルが取り出せてラクだったりして。気持ち負荷も小さい気がする(あくまで気持ち)。
PR
会社の貸与PCにとうとうEclipse入れてまった。もう後には引けない・・・!と言いつつも、ASは楽しすぎるのでSJC-Pの受験勉強は一向に進みません。

さて、今日は2つのARGBカラーの中間の値を求める方法を考えていました。
一部ソフトっていうか、SAIで開けなかったんだけどね。
とりあえず改造を施していない標準の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()という見慣れないメソッドが使われていた。標準のバイト配列の圧縮処理を利用しているらしい。巨大画像のエンコードで時間を喰うとしたらおそらくはコレだろうから、断念・撤退したのだった。
まず、コードが見づらいので google-code-prettify を導入。

ちょっと長くなります。
まずオリジナルのJPGEncoderから。ソースはここから引用。
例のアレ、ようやくカタチになったのだけど、不安なところが(今のところ)ひとつ。

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


pers_bug.jpgパースエディタに下絵を表示させるべく、昨日一日ずっとMXMLと格闘して、なんとか見えてきた。データバインディングのことも少しずつ分かってきましたよ。

さて、どうもうまくいかないところが一カ所。
下絵を読み込む前は「下絵を破棄」っていうアイテムは初期状態では enable="false" になるようバインディングを施してる筈なのだが、ならない。
で、セパレータで挟んでアイテムをコピペすると、コピペしたアイテムはバインディングが出来てる!?まったく同じコードなのに?
(ちなみにセパレータを挟まないと全部バインディングに失敗する!)

どうも、これはバグじゃなかろうか。
で、回避方法は以下。
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
最新コメント
[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]