かなり環境が整ってきた

かなり環境が整ってきた.デスクトップ上にPCを集めて,椅子を動かさなくてもすべての作業をシームレスに実行できるようにした.中央のモニターにはビデオ切り替え機のボタン一つで,3機すべての画面を表示できる.キーボードとマウスはMouth Without Bordersで共有しているので,多少時間の掛かる処理を行うときは,正面のキーボードを使う.

IMG_20220310_134259_BURST001_COVER

快適だ!あと欲しいのは無線HDDだけだ.3TBくらいのHDDが手に入れば,バックアップをすべてこのHDDに移し,負荷を軽くした状態で常時完全スキャンが実施できるようになる.この無線HDDは言ってみれば,クラウドの代用のようなものだ.これができれば,万全と言ってよいのではないかと思う.いま悩んでいるのは,ポットを購入したものかどうか?という些細なことだ.現在はポットの代わりに炊飯器で代替しているが,それほど不便は感じていない.場合によっては,昔のようにヤカンでお湯を沸かすようにしてもいいかな?とも考えている.

IMG_20220220_225526

横書き機能もだいぶ整ってきたが,まだメモリ描画環境に切り替えると描画できなくなるという不具合が残っている.⇒ビットマップ生成の問題というより,再描画の問題なのではないか?そもそも,メモリ描画環境は論理座標系なのか物理座標系なのか?ビットマップにはピクセル単位で描画しているはずだから,当然物理座標系と考えられるが,そうなっているだろうか?少し頭を冷やして考えた方がよい.メモリ描画環境の内容をJPGファイルに保存してみた.下図のようになっている.

image image

つまり,メモリ描画環境ができ損なっているということだろう.これができていなければ話にならない.⇒メモリ描画環境生成時,Refreshに渡す引数のrcBoundsを空にして描画できた↑.ただし,背景は塗りつぶししていないため,真っ黒だ.⇒ようやく描画できるようになった.

image

この論理で正しいということを確認しておこう.通常,座標系は論理座標系と物理座標系に大別されるが,このシステムではそれに加えて第三の座標系とも呼ぶべき「直交座標系」が使われている.通常,論理座標系と物理座標系の変換は,主に座標のスケールと向き,および原点位置に限定され,X軸とY軸の交換までは実施しない.直交変換は図形データが描画プリミティブに渡される直前でXY座標の反転を実施,上位関数からは隠蔽される仕組みになっている.

この仕掛は概ね動作していると言ってよいと思われるが,ビットマップ描画環境では多少話が変わってくる.ビットマップメモリはそれ自体1個の描画デバイスコンテキストだが,書き込みと読み出しの両面で座標変換が必要になる.現行ではこれを以下のように処理している.

  1. メモリビットマップのCImageは物理座標系として扱う
  2. TREEVIEW::BuildBitMapでは,_CDC::LPtoDPで直交座標変換する
  3. TREEVIEW::buildBitMapでは,その逆変換を行って,描画を実行する
  4. ビットマップからスクリーンへの転送 BitBltでは座標変換は行わない

これでよいと思う.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA