×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
最初に乗っけるのはスクリーンショット画像にして、SWFのサンプルは続きに掲載すればいいのか。
関係ないけど、表現したい画の為に制服女子高生のイラストが要るが、描くのが超億劫。
倦怠術の達人「超 億劫」。
関係ないけど、表現したい画の為に制服女子高生のイラストが要るが、描くのが超億劫。
倦怠術の達人「超 億劫」。
あまりのセンスのNASAに我ながらビックリした。
あと変にインタラクティブに凝ったら、くそ重くなった。
[追記] 更に色々加えたらいよいよ、重いだけでなく悪趣味になってきた。元に戻す。作ったものは続きに。
あと変にインタラクティブに凝ったら、くそ重くなった。
[追記] 更に色々加えたらいよいよ、重いだけでなく悪趣味になってきた。元に戻す。作ったものは続きに。
以前8ビットBMPエンコーダ ってのを作ったんだけど、これは256階調のグレースケールしか出力出来なかった。で、256色の最適化されたカラーテーブルを作る方法について以前から考えていたりしたのだけど、てっく煮さんでK-means法というクラスタリング手法の事を知り、これを減色アルゴリズムに使うことにした。
今回はパラメータをRGBの3座標に限定したけど、さらにピクセルのXY座標も付加することで(距離関数に何かしらの工夫がいるんでしょうけど)領域判定なんかにも使えるらしい。
以下は16色で減色を行うサンプル。上が元画像ね。
クリックするたびにカラーテーブルを更新して徐々に最適化する。
あと何かキーを押すとリセット。
処理の手順は簡単には以下のような流れ。
RGBよりもL*a*b*だとかYCrCbだとかの色空間でクラスタリングしたほうが、人間の目にとってより自然になる、というような話もあるけど。
今回はパラメータをRGBの3座標に限定したけど、さらにピクセルのXY座標も付加することで(距離関数に何かしらの工夫がいるんでしょうけど)領域判定なんかにも使えるらしい。
以下は16色で減色を行うサンプル。上が元画像ね。
クリックするたびにカラーテーブルを更新して徐々に最適化する。
あと何かキーを押すとリセット。
処理の手順は簡単には以下のような流れ。
- ランダムな16色のカラーテーブルを作って、それぞれのピクセルを一番近いテーブル色で置き換える。
- 同じテーブル色を選んだピクセルの元の色の平均値を求めて、そのテーブル色を置き換える。
- 再度、それぞれのピクセルを一番近いテーブル色で置き換える。
- 以下、2と3の繰り返し
RGBよりもL*a*b*だとかYCrCbだとかの色空間でクラスタリングしたほうが、人間の目にとってより自然になる、というような話もあるけど。
BitmapData.getPixelsメソッドの戻り値はByteArrayなので、使いどころが難しいと思ってたんですが、やってみると意外や、ByteArray.readByteで順にARGBのチャネルが取り出せてラクだったりして。気持ち負荷も小さい気がする(あくまで気持ち)。
会社の貸与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を読み込みそうに見えなくもないけども、やっぱり納得がいかない。
なんでなん?リスナー関数はスレッドみたいに割り込めてしまうん?
とりあえず解決。
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 |
最新記事
(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]
最新トラックバック
カテゴリー
アーカイブ
ブログ内検索
アクセス解析