概要
----現在、多くの学習ソフトやゲームCDでは、さまざまなコンテンツがよく見られます。
グラフィック表示技術は、動き、インターレース、雨滴の形状、ブラインド、ビルディングブロックの積み重ね、およびその他のグラフィック表示方法に依存して、画像をより生き生きとして視聴者にとってより魅力的なものにします。この記事では、Delphi でさまざまなグラフィック表示テクニックを実装する方法を説明します。
基本原則
----Delphi では、フォームで TImage コンポーネントを定義し、そのピクチャ属性を設定して、有効な .ICO、.BMP、.EMF、または .WMF ファイルを選択してロードするだけで、画像を表示するのが非常に簡単です。選択したファイルが TImage コンポーネントに表示されます。ただし、これはグラフィックをフォームに直接表示するだけで、スキルはまったくありません。グラフィック表示に独特の効果を持たせるには、次の手順に従います。
----TImage コンポーネントを定義し、表示するグラフィックスを最初に TImage コンポーネントにロードします。つまり、グラフィックス コンテンツをディスクからグラフィックス キャッシュとしてメモリにロードします。
----TImage コンポーネントのグラフィックスと同じサイズの新しいビットマップ オブジェクトを作成します。
----CanvasのCopyRect機能(あるキャンバスの長方形領域を別のキャンバスの長方形領域にコピーする)を使って、テクニックを駆使して動的に形を整えていきます
ファイルの内容をビットマップに変換し、そのビットマップをフォームに表示します。
----実装方法
さまざまなグラフィック表示テクニックを以下に紹介します。
1.プッシュプル効果
表示されるグラフィックスが上下左右の方向から画面内に引き込まれ、同時に画面上の元の古いグラフィックスが隠蔽されます。この効果は 4 つに分類できます。
プルアップ、プルダウン、左プル、右プルの 3 つのタイプがありますが、原理は似ています。プルアップ効果を例に挙げます。
原則: まず、一時グラフィックの最初の水平線を表示するビットマップの最後の水平線に移動し、次に一時グラフィックの最初の 2 つの水平線を表示する最後の 2 つのビットマップの水平線に移動します。すべてのグラフィック データが移動されるまで、最初の 3 つと最初の 4 つを移動します。移動プロセス中に、表示されたビットマップが下から上に浮いて、プルアップ効果が得られることがわかります。
プログラムアルゴリズム:
手順 TForm1.Button1Click(送信者: TObject);
変数
newbmp:TBitmap;
i、bmp高さ、bmp幅:整数;
始める
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
for i:=0 から bmpheight まで
始める
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-i,bmpwidth,bmpheight),
画像1.キャンバス、
Rect(0,0,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
終わり;
newbmp.無料;
終わり;
2. 縦千鳥効果
原理: 表示するグラフィックスを 2 つの部分に分割し、奇数番号の走査線を上から下に移動し、偶数番号の走査線を下から上に移動し、両方を同時に実行します。画面からは、上端と下端に表示されている明るいグラフィックが、完全に透明になるまで画面の中央に向かって移動していることがわかります。
プログラムアルゴリズム:
プロシージャ TForm1.Button4Click(送信者: TObject);
変数
newbmp:TBitmap;
i、j、bmp高さ、bmp幅:整数;
始める
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
i:=0;
while i< =bmpheight を実行します
始める
j:=i;
j>0 の間、そうする
始める
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
画像1.キャンバス、
Rect(0,bmpheight-i+j-1,bmpwidth,bmpheight-i+j));
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-j,bmpwidth,bmpheight-j+1),
画像1.キャンバス、
Rect(0,ij,bmpwidth,i-j+1));
j:=j-2;
終わり;
form1.Canvas.Draw(120,100,newbmp);
i:=i+2;
終わり;
newbmp.無料;
終わり;
3. 横千鳥効果
原理: 垂直インターレース効果と同じ原理ですが、2 つのグループに分割されたグラフィックスがそれぞれ左端と右端から画面内に移動する点が異なります。
プログラムアルゴリズム:
プロシージャ TForm1.Button5Click(送信者: TObject);
変数
newbmp:TBitmap;
i、j、bmp高さ、bmp幅:整数;
始める
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
i:=0;
while i< =bmpwidth を実行します
始める
j:=i;
j>0 の間、そうする
始める
newbmp.Canvas.CopyRect(Rect(j-1,0,j,bmpheight),
画像1.キャンバス、
Rect(bmpwidth-i+j-1,0,bmpwidth-i+j,bmpheight));
newbmp.Canvas.CopyRect(Rect
(bmpwidth-j,0,bmpwidth-j+1,bmpheight),
画像1.キャンバス、
Rect(ij,0,i-j+1,bmpheight));
j:=j-2;
終わり;
form1.Canvas.Draw(120,100,newbmp);
i:=i+2;
終わり;
newbmp.無料;
終わり;
4. 雨粒効果
原則: 一時グラフィックスの最後の走査線を、表示されているビットマップの最初から最後の走査線に順番に移動し、この走査線が画面上にその痕跡を残せるようにします。次に、一時グラフィックスの最後から 2 番目の走査線が、可視ビットマップの最初から最後から 2 番目の走査線に順番に移動されます。残りの走査線についても同様です。
プログラムアルゴリズム:
プロシージャ TForm1.Button3Click(送信者: TObject);
変数
newbmp:TBitmap;
i、j、bmp高さ、bmp幅:整数;
始める
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
for i:=bmpheight downto 1 do
for j:=1 to i do
始める
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
画像1.キャンバス、
Rect(0,i-1,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
終わり;
newbmp.無料;
終わり;
5.ルーブル効果
原則: 一時グラフィックスに配置されたデータをいくつかのグループに分割し、最初のグループから最後のグループに順番に移動します。最初に各グループが最初の走査線を表示されているビットマップの対応する位置に移動し、2 番目の走査線を移動します。 time 2 番目の走査線を移動し、次に 3 番目と 4 番目の走査線を移動します。
プログラムアルゴリズム:
プロシージャ TForm1.Button6Click(送信者: TObject);
変数
newbmp:TBitmap;
i、j、bmp高さ、bmp幅:整数;
xgroup、xcount:整数;
始める
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
xgroup:=16;
xcount:=bmpheight div xgroup;
for i:=0 から xcount まで
for j:=0 から xgroup do
始める
newbmp.Canvas.CopyRect(Rect
(0,xcount*j+i-1,bmpwidth,xcount*j+i),
画像1.キャンバス、
Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
form1.Canvas.Draw(120,100,newbmp);
終わり;
newbmp.無料。
終わり;
6. ビルディングブロック効果
原理: これは雨粒効果のバリエーションであり、違いは、ビルディング ブロック効果がスキャン ラインだけでなく、グラフィックスを毎回移動させることです。
プログラムアルゴリズム:
プロシージャ TForm1.Button7Click(送信者: TObject);
変数
newbmp:TBitmap;
i、j、bmp高さ、bmp幅:整数;
始める
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
i:=bmp高さ;
i>0 の間
始める
for j:=10 私はそうします
始める
newbmp.Canvas.CopyRect(Rect(0,j-10,bmpwidth,j),
画像1.キャンバス、
Rect(0,i-10,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
終わり;
i:=i-10;
終わり;
newbmp.無料;
終わり;
結論
上記のグラフィック表示効果はコンピュータに渡されており、ソフトウェア環境は Delphi 3.0、ハードウェア環境は Pentium 100M 互換機です。とてもうまくいきます。