[HMC]年間5250円で独自ドメイン付属、ウィルスチェックありのレンタルサーバ!
Last update : 1999/08/27
DirectDraw基礎 第10回
画像転送時に自分でクリッピングする
サンプルコードのダウンロード
  では、まずサンプルコードをダウンロードし、解凍して下さい。 私はVisual C++6.0でコンパイルしているので、をお持ちの方は Visual C++でプロジェクトファイルを開いて下さい(「ddraw_10.dsw」をダブルクリックすれば開けます)。 圧縮ファイルに含まれる「ddraw_10.exe」をダブルクリックし、実行してみて下さい。どうでしょう?画面が切り替わり、フルスクリーン化し、 SLIME(?)と書かれた画像がタイル状に敷き詰められ、左上へスクロールするのが解ると思います。
  というわけで今回は、自分で画像転送時にクリッピングしたいと思います。
プログラム側でクリッピング
  今回のサンプルの注目すべき点は「スクロール」では無く、画面の端っこのほうに表示している「完全でない画像」です(謎。 今まで、BltFast関数を使用した自作関数Bltでは、転送先で少しでも画像がはみ出てしまうと、何も表示されなくなってしまいます。 で、画面から少しでもはみ出してしまった場合、はみ出ていない部分を表示させる処理がクリッピングと言われています(たぶん)。

  この自作関数では、転送前に転送先の座標と縦幅、横幅からはみ出している部分を検出し 、うまく表示出来るように値を変更しています。まぁ、見りゃ解りますね(^^;ついでなので クリッピングの範囲を変更出来るようにもしておきました。この自作関数では、どこのサーフェイスでも適応されます。

使用例はこんな感じでしょうかね

  今回は、プログラム側でクリッピングを行いました。その理由として、DirectDraw側で クリッピングを行うと、家の環境で試したところ、速度がガタ落ちしたからです。プログラムで処理した方がよっぽど早いですし 、応用も利きます。ただし、この方法にも欠点はあります。それは拡大縮小を行った時にクリッピング出来ないという点です。 というわけで、次回では一応DirectDrawでのクリッピング方法を説明します(私は使ってませんけど)。