スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« iPhone SEは買うかも | トップページ | 意外に楽勝だったかも »

単純なHiDPI対応は完了

今は、MasterReversiの次バージョンを開発中で、当初から予定していたHiDPI対応を始めているのだが、今日の時点で、単純なHiDPI対応は完了した。具体的には、ダイアログに表示しているビットマップの表示位置やサイズが適切になったのだが、まだ、大物が残っている。

MasterReversiで表示しているリバーシ盤面なんかのビットマップは、基本的には、メモリデバイスコンテキストに描画したビットマップをBitBltでダイアログ等に表示する様になっている。

何故、メモリデバイスコンテキストに最初に描画しているのか、というと、ダイアログなんかに直接描画すると、描画中に画像がチラついてしまうからだ。

もっとも、上記は20年くらい前から、Windowsでは普通に使われていたテクニックでしかなく、MasterReversiの描画系では、より複雑な処理を色々と行っている。

具体的には、まず、普通のメモリ上にビットマップデータをRGB32形式で作成し、その後、それをメモリデバイスコンテキスト上のビットマップにし、更に、上記の様に、実際の描画デバイスのコンテキストにBitBltしている訳だ。

何故、上記の様になっているのか、というと、MasterReversiの開発を始めた頃には、普通に、メモリデバイスコンテキスト上に画像データを生成する格好にしていたのだが、それだと、見栄えの良い画像が作成できなかったからだ。

つまり、GDIの描画関数を普通に使っただけでは、綺麗な盤面は生成できなかったので、独自に、RGB32形式でメモリ上に画像を出力できる様々な描画関数を作成し、出来上がった見栄えの良い画像データを、GDI関数を使って描画する格好にした訳だ。

もっとも、巷のリバーシプログラムの多くは、そんな事はしていない。

何故なら、上記の様な処理形態にしなくても、綺麗な盤面を表示したければ、ペイントツールなんかで、それを作成し、ビットマップファイルか、埋め込みデータとして保持する格好にしておけば、GDI関数を使って、その画像は表示できるので、綺麗な盤面も描画できるからだ。

しかし、上記の様な方式には問題もある。

それは何なのか、というと、Windowsソフトの場合、普通は、ウインドウサイズを変更可能にする訳なので、上記の盤面用のビットマップデータには、かなり大きめなモノを作成しておき、ウインドウサイズに合わせて縮小表示する格好にしなければ、ウインドウサイズを大きくした時に、ボヤけた感じになってしまう、という事だ。

もっとも、上記が既に答えになっているので、別に、それで良いじゃん?、と、思った人もいるかもしれないのだが、リバーシプログラムの場合、盤面の任意の位置に石を置けなければならないので、いくら綺麗な盤面データを外部ツールで作成しておいたとしても、実際の動作時には、その画像と石との合成が必要になる訳だ。

そして、GDI関数では、透明画像は扱えないので、この盤面と石との合成を綺麗に行おうとすると、実質的に、盤面用に使える画像が色々と制限を受けてしまう訳だ。

と、いう事なので、MasterReversiでは、任意の綺麗な盤面を表示出来る様に、石の画像を半透明画像として保持し、それを盤面と合成したり出来る自前の描画関数を多数用意した訳なのだが、それに加えて、前述のウインドウサイズに合わせた拡大縮小用の関数も用意した。

もっとも、実際の所としては、関数が色々とあっても描画処理が面倒になるので、用意したのは関数ではなく、DrawObjというクラスだ。

MasterReversiでは、盤面や石やテキストなんかは、上記のDrawObjクラスのインスタンスになっていて、このオブジェクトでは、半透明色も使えるし、定義サイズに合わせて、極力綺麗な画像になる様に、独自にレンダリングも行われる。

そして、描画時には、それらのオブジェクトを半透明合成し、最終的にRGBデータにしてから、GDI関数でデバイスコンテキストに描画する格好になっている訳だ。

と、いう事で、MasterReversiの初版までの開発では、実は、リバーシエンジンと同じか、ひょっとすると、それ以上の労力をかけて、描画エンジンも開発した訳なのだが、その結果として、HiDPI状態であろうが無かろうが、メインのリバーシ盤面については、常に、ウインドウサイズに合わせて、可能な限りの綺麗な描画が行われる様になっている。

これに対して、例えば、Bookダイアログなんかには、リバーシボードの簡易画像が表示されるのだが、これらの画像は、普通にGDI関数を使って描画している。

なので、HiDPI対応としては、まず、これらの画像の表示位置とサイズを調整する必要があったのだが、今日の時点で、この作業は終わった。

残すところとしては、ダイアログ上にはリストボックスなんかがあるのだが、そのテキストサイズが変わると、そこに表示される情報量が少なくなりすぎる問題があるので、これについて何とかする必要がある。

特に、操作パネルについては、デフォルト設定では、プログラム起動後には常時表示されるので、これの見栄えを何とかしなければならない。

= この記事に関連する公開中ソフト =

MasterReversi

MasterReversi

(2016/05/04追記)

« iPhone SEは買うかも | トップページ | 意外に楽勝だったかも »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/63387569

この記事へのトラックバック一覧です: 単純なHiDPI対応は完了:

« iPhone SEは買うかも | トップページ | 意外に楽勝だったかも »

2017年8月
    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    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google