gpmodule

2018/06/01 gpmodule 1.03 R2 をアップしました。
2007/09/01 gpmodule 1.03 をアップしました。
2007/06/22 gdiplus.dll ダウンロード先リンクを追加しました。
2007/03/20 gpmodule 1.02 をアップしました。
2007/03/09 GPModule 1.01 をアップしました。
2006/12/23 トラブルシューティングを追加しました。
2006/12/17 GPModule 1.0 をアップしました。

HSP でアンチエイリアシングされた図形を描画したい

滑らかにアンチエイリアシングされた画像は目に優しく、心地いいものです。 アンチエイリアシングされたフォントや図形に慣れているときに、急にそうでない画像を見ると、 ギラギラでとても見づらく感じてしまうものです。

さて、HSP 標準命令である line や circle を使うと、下の図のようにジャギーでざらざらの線が描画されます。 (これはおなじみなので、特に苦ではないかもしれませんが...)

	repeat 50
		hsvcolor cnt*7, 200, 200
		line rnd(300), rnd(300)
		circle rnd(300), rnd(300), rnd(300), rnd(300), 0
	loop

PC で描画する線といえばこれが普通だったのですが、Windows XP からは GDI+ という強力な描画ライブラリが用意されていて、 アンチエイリアシングのかかった滑らかな図形も描画できるようになっています。

gpmodule は、GDI+ の Flat API を HSP 用にラップし、標準命令と同じ感覚で呼び出すことができるようにしたモジュールです。 標準命令と同じ使い勝手で、下のように滑らかな線で描画できます。

#include "gpm.hsp"
	repeat 50
		gphsvcolor cnt*7, 200, 200
		gpline rnd(300), rnd(300)
		gpcircle rnd(300), rnd(300), rnd(300), rnd(300), 0
	loop
	redraw

二つのスクリーンショットを部分拡大すると、下図のようになります。gpmodule では、滑らかなアンチエイリアシングがかかっているのがわかります。

ダウンロード

gpmodule 1.03 R2 for HSP3

gpm103_r2.zip

gpmodule 本体と、簡単な説明書と、サンプルスクリプトのセットです。

リリースノート

1.03 R2
・モジュールとサンプルスクリプトをセットにしたアーカイブを作成

1.03
・スクリプト終了時に gpexit が呼ばれるよう変更

1.02
・描画結果が標準命令と 0.5 ピクセルずれる問題を解消

1.01
・初期化処理を効率化

1.0
・初公開版

つかいかた

gpm.hsp をインクルードすると、gpmodule の命令が使用できるようになります。

あとは、color, line, circle といった標準命令とまったく同じように、gpcolor, gpline, gpcircle 命令を使って描画を行います。 標準命令の先頭に gp をつけた名称が、gpmodule の描画命令になっています。

gpmodule を使って描画した結果は、redraw 命令で画面を更新したときに表示されます。

gpmodule に用意される命令は、下記のとおりです。パラメータは、標準命令と同じです。

・色選択命令 (GDI+ での描画色を選択するためには、これらの命令を使用する必要があります。)
  gpcolor
  gphsvcolor
  gppalcolor
  gpsyscolor

・描画命令
  gpline
  gpcircle

gpmodule は簡単に使えるモジュールなので、今のところヘルプファイルは用意されていません。

クイック トラブルシューティング

gpmodule を使用して期待した結果が得られない場合のトラブルシューティング

・図形が描画されない
 - redraw 命令で表示画面を更新していますか?

・アンチエイリアシングがかからない
 - OS のバージョンは Windows XP 以降、もしくは gdiplus.dll 導入済み環境ですか?
 - color 系命令の代わりに gpcolor 系命令を使用していますか?
 - line, circle 命令の代わりに gpline, gpcircle 命令を使用していますか?
 - 複数のスクリーン ID を切り替えて描画する場合は、スクリーン切り替え後に gpcolor 系の命令で色を再選択する必要があります。

・"文法が間違っています" というエラーになる
 - gpm.hsp は正しくインクルードされていますか?

GDI+ が存在しない環境での動作

gpmodule は、Windows 2000 など GDI+ が存在しない環境では標準描画命令のモードで動作するようになっています。

著作権フリー。

sprocket は、gpmodule の著作権を主張しません。

gpmodule の改造も、gpmodule を組み込んだソフトの配布も自由です。

もしこのモジュールを拡張して GDI+ プログラミングを行う場合は、GDI+ Flat API を叩く必要があります。 この API そのものについては資料があまりないのですが、Microsoft のサイトからダウンロードできる Platform SDK の中の GdiPlus***.h (C++ 用クラス定義) と、クラス (Graphics とか Pen とか Brush とか) の使用方法とを照らし合わせれば、 間接的に API の使い方がわかると思います。