■ 新・ゲーム開発講座 |
■ へっぽこプログラミング入門♪ |
■第6夜:BMPの表示 テキスト表示が出来たところで、いよいよグラフィック(BMPファイル)の表示をしてみましょう。BMPの表示には、お手軽版から自力フォーマット解析までいろいろな方法がありますが、ここではお手軽版の手法を紹介します。下の関数をスケルトンにそのまま貼りつけて使いましょう♪(なんて安直 ^^;) |
int Load_Bmp( HDC hdc, char *f_name_of_BMP) {
} |
さて、貼りつけておしまい・・・・では悲しすぎますので(笑)、多少の解説をしてみようと思います。この記述、前回のフォント設定とほとんど同じことに皆さんはお気づきになりましたでしょうか。CreateFont()の代わりに LoadImage()が置き換わったようなものです。 まず LoadImage()ですが、このAPIはアイコンやカーソルなどの読み込みも可能なマルチな仕様の読み込み関数となっています。今回は外部ファイルからBMPをDIB形式で読んで、その読み込んだデータのハンドルを
hbmp に取得しています。
); 【UINT uType,】
【UINT fuLoad 】
次に work_DC = CreateCompatibleDC(
hdc ) で、作業用に臨時のDC(デバイスコンテキスト)を生成しています。DCとは、画像データにアクセスするときに必要な各種情報を盛り込んだオブジェクトです。ここでは、プログラム起動時に開いたウィンドウと同じ属性のDCを作成しています。 転送そのものは、BitBlt() によって行います。APIの引数をみれば分かりますが、転送元、転送先ともにDCを取得しておく必要があります。 |
BitBlt( ); |
hdc, //転送先のDC 0, //転送先座標 X 0, //転送先座標 Y 640, //転送する矩形エリアの幅 480, //転送する矩形エリアの高さ work_DC,//転送元のDC 0, //転送元の座標 X 0, //転送元の座標 Y SRCCOPY //転送オプション(SRCCOPY=そのままそっくり転送) |
さて、転送が終ったら、用済みになった作業用DCを ReleaseDC() で消去して、さらに読み込んだ画像データも DeleteObject() で消去しておきます。最終的には、転送先のウィンドウ上にのみ、画像データが残ります。 だいたいのイメージが、伝わりましたでしょうか? サンプルソースがここにありますので、いろいろ改造して試してみてください。サンプルソースでは、g_tool.cpp にBMP表示部分を記述してあります。なお、オマケとしてフルカラーBMPの自力解読表示関数も入れておきましたので参考にしてください(猫サイトのソースをかなり参考にしています:笑 ^^;)。 |
サンプルソース実行画面♪ |