2008年1月30日

PixelCrew日記 - レイヤのためにその2。作りこむうちに他の機能に目移りするでござる

なんとか、1枚のレイヤと背景をブレンドする様になった。
いろいろいじり倒してるうちに対応漏れがあったミスなども直しながら、次のステップに移ろうかと考えた。
次のステップ・・・2枚以上のレイヤを重ねる。
初期段階から、画像はキャンバスという親クラスが各レイヤをリストで管理する設計にしてるんで楽勝だ。と思っていたら。

レイヤを管理するダイアログが無い。

さっくり作り、コンテキストメニューを実装。泥臭いことが手早く出来ることに軽く嫌悪するw
で、重ねると表示が真っ黒。
画像は黒で、アルファ値が1.0。追加したレイヤが手前なので奥が見えないorz
で、これは直すとして、確認をする環境が無いことに気づいた。
前後のレイヤにフリーハンドで線を描こうかと思っていたんだけど、黒しか出ない。
パレットのバンクはあるけど色が作れない。
ずいぶん前に「まだ先だからとりあえず256色画像のパレットが見れればいい」とか「減色処理の生成パレットが見れればいい」とか言って先送りにしたところだ。
他にもレイヤ単位で位置を動かせる用意があるんだけど、これもやんなきゃいけない。
むかしざっくり考えた案だと、選んでるレイヤとそれを挟んでるレイヤの3枚(奥、カレント、手前)を更にブレンドする。だったような。
更に思い出すと、フォント描画はプライベートフォントをサポートしたいと考えていた気がする。
フォント描画のためのUIは今から作るなー。
どれからやろうかとりあえず悩む状況になってしまったorz

2008年1月25日

見つけた小ネタ

猫でもわかるプログラミング Windows SDK編 第208章 タブコントロールにエディットコントロールをつける
WM_GETMINMAXINFOが返す値を自分で決めることでサイズ制限があっさり出来るなんて・・・今まで自前でやってた。
悪魔のプログラミングテクニック-SDK編 「Virtual List View (仮想リストビューコントロール)」
仮想リストビューってのも知らなかった。

PixelCrew日記 - レイヤのためにその1。フルカラーアルファブレンド

フォント描画も必要だけど、レイヤも欲しいよね。
フォントは書き込んだ後に動かすよね?
ということで、レイヤを先にはじめることに。
昔、8ビットカラー(256色)をBitBltのラスタオペレーションで透過したな。あれをマスキングじゃなくて、アルファブレンドに使えんかと寝ぼけた事を考えて、やるだけやってみたらやっぱりダメだった。
RGBの値をマスクすることはブレンドすることは違うよね、青が赤にもなるorz
ということで、GetDIBitsしてごりごりブレンドするコードを書く。
DirectDraw時代からこの構成やってるな。今の時代にこんな泥臭いことやってる人はいないだろう。
・・・GBA/NDS HomeBrew向けBMPコンバータとかでやったな。意外にいるかも。
閑話休題。
とりあえず、複数枚のレイヤを重ねるのはまだ先なんだけど、画像表示のロジックを次のように変更。
StretchBltなどAPIを駆使して比較的楽に表示

アルファ値のビットマップを作り、それと合成したものを表示
で、変更したら早速表示が重くなる。
InvalidateRect/ValidateRectをがんばって使ってみたところが原因だった。
がんばったコードをほとんど消してInvalidateRect→UpdateWindowで一発更新する形にして更に高速化。
体感的に余裕のある速度になりました。むしろ早くなったorz
それにしても、技術的なことはいっさい書いてないなー。

2008年1月24日

PixelCrew日記 - ポップアップコンテナを実装してみる、の巻き

先日、ピックアップした項目を実装し始める。
とりあえず、ポップアップウィンドウに各種ツールダイアログをしまいこむコンテナ的ダイアログを作る。
現時点でも十分邪魔なツールダイアログが多いので。コード上で位置あわせを毎回書くのにうんざりしてきたし。
といっても、プレーンなダイアログを作ってそいつをオーナウィンドウにしただけ。
Enter/ESCで閉じるし(再表示不可)、そのダイアログ内で移動できる(触れない場所まで移動すると助けられない)。
とりあえず仕舞い込めたのでよし。
なんか部屋の掃除とよく似たアバウトさを感じる・・・。気のせいだけど。

2008年1月22日

PixelCrew日記 - 次にいるのは何だろう、の巻き

大味ながら実装した領域選択とトリミングで便利度が上がったPixelCrew。
便利度が上がったハズなんだけど、いまいち自分が乗り換え切れていない。
なんでかと考えたんだけど、まだまだ機能不足な気がする。
では、どんな機能を作れば乗り換えるようになるのか、軽く思いついたものを挙げてみた。
- レイヤ対応
- フォント描画
- アンドゥ/リドゥ
- ポップアップウィンドウを格納するコンテナポップアップ
- コンテナポップアップのドッキング
本当は全部上げようかと思ったんだけど、半ベソになりそうなのでこれぐらいにしておいたんですが、それでも辛そう。
レイヤってどうやるの? と、とぼけつつも重ね合わせの方法を暇なときに考えたりしてます。
アンドゥ/リドゥも双方向リストで実現できないかなとうっすら思っていたり。
んでもって、実装のボリュームを考えるとそれだけで疲れてしまう。
歳なのか一時的なものなのか・・・。

dsgba N-Card

NDS開発をしていて、PC→カードリーダ→マジコン→NDSというメディア移動が面倒なので、いわゆる1:1タイプを買ってみた。
とりあえずN-Card系との事なんだけど、DSGBAという表記もある。
クライアントはUFPEX(UltraFlashPass EX)のやつが対応してる。
しかし、先日作ったOgg再生テストで音が出ないorz
今まで使ってたものではちゃんと動くのに。
無印NinjaPassに変わる便利アイテムになると思ったのに・・・。

2008年1月16日

Vistaが重いのを見直す、の巻き

冬場はほとんどコタツでノートPCをメインに使っているんですが、デスクトップマシンも実は動いています。
iPodの母艦にしているのでiTunesにPodcast取りに行かせたりさせてるぐらいですが。
で、ふと思った事があります。
Aeroの中でもAeroグラスは外してもいいかな、と。
某コミュの勉強会でプロジェクターに映されていたデスクトップはAero Basic(透過なし)だったように覚えています。
というのを思いつき、設定の切り替えで動作に影響が出るかテストしてみました。
やったことその1 - AeroをGlassからBasicに
気持ち軽くなった程度? たくさんウィンドウ開くと変わるかも。

やったことその2 - ClearTypeをオフに
あまり変化なし。
これによってメイリオの見栄えががっかりするぐらい落ちる。そのままでもいい気がする。

やったことその3 - サイドバーにある時計ガジェットの秒針表示を無くす
常時15~20%ぐらいだったsidebar.exeのCPU負荷がゼロに。これが一番効果的かも。
書籍Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミングや原著であるblog"The Old New Thing"でも書かれています。
The Old New Thing : Why doesn't the clock in the taskbar display seconds?
この現象がまだ残っているのかは解らないけれど、秒針は出すなということか。
夏場にsidebar.exeの挙動を疑っていた時期がそういえばあったような。
というか、サイドバーも要らないか? いやいやせっかくのワイド液晶に素敵なガジェットを・・・時間の問題だorz

ちなみに、マイクロソフトのAero紹介の締め。
"Windows Aero では、グラフィック ドライバ関連のシステム障害や Stop エラーもほとんど発生しません" ... こいつは嘘だ。