| 図形描画関数 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面左上から右下にかけて真っ白の線を描きます
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
Cr = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
DrawLine( 0 , 0 , 640 , 480 , Cr ) ; // 線を描画
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に青い四角を描き、四角形の中も塗りつぶします
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
Cr = GetColor( 0 , 0 , 255 ) ; // 青色の値を取得
DrawBox( 0 , 0 , 640 , 480 , Cr , TRUE) ; // 四角形を描画
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に半径150の青い円を描きます、中身は塗りつぶしません。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
Cr = GetColor( 0 , 0 , 255 ) ; // 青色の値を取得
// 円を描画
DrawCircle( 320 , 240 , 150 , Cr , FALSE ) ;
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に半径 (150,100) の青い楕円を描きます。中身も青色で塗りつぶします
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
Cr = GetColor( 0 , 0 , 255 ) ; // 青色の値を取得
// 楕円を描画
DrawOval( 320 , 240 , 150 , 100 , Cr , TRUE ) ;
WaitKey() ; // キーの入力待ち((7-3)『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に黄色の三角形を描画し、中身を塗りつぶします
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
// DXライブラリ初期化
if( DxLib_Init() == -1 ) return -1;
// 黄色の値を取得
Cr = GetColor( 255 , 255 , 0 ) ;
// 三角形を描画
DrawTriangle( 320, 100, 160, 420, 480, 420, Cr, TRUE ) ;
// キーの入力待ち((7-3)『WaitKey』を使用)
WaitKey() ;
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に緑の点を描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
Cr = GetColor( 0 , 255 , 0 ) ; // 緑色の値を取得
// 点を描画
DrawPixel( 320 , 240 , Cr ) ;
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル なし | ||||||||||||||||||||||||||||
| グラフィックデータ制御関数 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面左上を画像の左上頂点としtest1.bmpを透過色有効で表示します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// BMP画像の表示
LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmpを読みこみ画面左上に描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// BMP画像のメモリへの読みこみ
GHandle = LoadGraph( "test1.bmp" ) ;
// 画面左上に描画します(『DrawGraph』を使用)
DrawGraph( 0 , 0 , GHandle , FALSE ) ;
// キーの入力待ち(『WaitKey』を使用)
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test2.bmpを一つのグラフィックのサイズ48×56横4、縦3、分割総数 10で分割読み込みし、int型の配列GHandleに格納します。 その後ロードしたグラフィックパターンを画面左上でアニメーション させます。(画面はちらつきます)
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle[ 10 ] ;
int i ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// BMP画像のメモリへの分割読み込み
LoadDivGraph( "test2.bmp" , 10 , 4 , 3 , 48 , 56 , GHandle ) ;
// ロードしたグラフィックのアニメーション
i = 0 ;
// キーが押されるまでループ(キー判定には『CheckHitKeyAll』を使用)
while( CheckHitKeyAll() == 0 )
{
// グラフィックの描画(『DrawGraph』使用)
DrawGraph( 0 , 0 , GHandle[ i ] , FALSE ) ;
// アニメーションパターンナンバーを変更
i ++ ;
if( i == 10 ) i = 0 ;
// 一定時間待つ(『WaitTimer』使用)
WaitTimer( 100 ) ;
// メッセージ処理
if( ProcessMessage() == -1 )
{
break ; // エラーが起きたらループから抜ける
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル GetDrawScreenGraph のサンプルを参考にして下さい。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 縦横20ピクセルの描画可能グラフィックハンドルを作成して、そこに「あ」の文字を描画した後、 作成した描画可能グラフィックハンドルを画面いっぱいに拡大して描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int handle;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 20x20サイズのアルファチャンネルなしの描画可能画像を作成する
handle = MakeScreen( 20, 20, FALSE ) ;
// 作成した画像を描画対象にする
SetDrawScreen( handle ) ;
// 画像に対して「あ」という文字を描画する
DrawString( 0, 0, "あ", GetColor( 255, 255, 255 ) ) ;
// 描画対象を表画面にする
SetDrawScreen( DX_SCREEN_FRONT ) ;
// 描画対象画像を画面いっぱいに拡大して描画する
DrawExtendGraph( 0, 0, 640, 480, handle, FALSE ) ;
// キー入力待ち
WaitKey();
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 640x480 のアンチエイリアス効果のある描画可能なグラフィックを作成して、 そのグラフィックに DxChara.x を描画した後、裏画面に描画可能なグラフィックを描画します。 SetFullSceneAntiAliasingMode で画面自体の設定を変更してアンチエイリアス効果を得るという処理を、 MakeScreen と SetDrawValidMultiSample を使った場合はこうなります、というサンプルです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
int Screen ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画可能なグラフィックのアンチエイリアス設定を行う
SetDrawValidMultiSample( 4, 2 ) ;
// 描画可能なグラフィックの作成
Screen = MakeScreen( 640, 480, FALSE ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 描画先を描画可能がグラフィックに設定
SetDrawScreen( Screen ) ;
// 画面を初期化
ClearDrawScreen() ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 描画可能なグラフィックを描画
DrawGraph( 0, 0, Screen, FALSE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmpをメモリに読み込み、画面左上に透過色有効で描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを画面左上に描画
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmpをメモリに読み込み、座標( 100 , 0 )に透過色無効で反転描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを反転描画
DrawTurnGraph( 100 , 0 , GHandle , FALSE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmp(サイズ130×480)をメモリに読み込み、座標( 100 , 0 )に 横幅2倍のサイズで透過色有効で描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを拡大描画
DrawExtendGraph( 100 , 0 , 100 + 130 * 2 , 0 + 480 , GHandle , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に test1.bmp を1.5倍に拡大し90度回転させて描画します
#include "DxLib.h"
#define PI 3.1415926535897932384626433832795f
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを回転描画
DrawRotaGraph( 320 , 240 , 1.5f , PI / 2 , GHandle , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面中心に test1.bmp を1.5倍に拡大し画像の左上端を基点に90度回転させて描画します
#include "DxLib.h"
#define PI 3.1415926535897932384626433832795f
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを回転描画
DrawRotaGraph2( 320, 240, 0, 0, 1.5f, PI / 2, GHandle, TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmp(サイズ130×480)をメモリに読み込み、( 0 , 0 )( 145 , 62 ) ( 12 , 56 )( 168 , 121 )をそれぞれ描画する画像の左上、右上、右下、 左下として透過色有効で描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを自由変形描画
DrawModiGraph( 0 , 0 , 145 , 62 , 168 , 121 , 12 , 56 , GHandle , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル グラフィック testDiv.bmp を読み込み、グラフィック中の (32,32)-(64,64) の部分 だけを画面座標 (100,100) に描画する
#include "DxLib.h"
// WinMain 関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Graph ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1 ;
// グラフィックのロード
Graph = LoadGraph( "testDiv.bmp" ) ;
// グラフィック中の(32,32)-(64,64)の部分を画面座標(100,100)に
// 透過色処理あり、反転処理なしで描画
DrawRectGraph( 100, 100, 32, 32, 32, 32, Graph, TRUE, FALSE ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル testDiv.bmp をロードし、作成したグラフィックから、(0,32)-(32,64) の部分を抜き出し新たなグラフィックハンドルを作成します。
#include "DxLib.h"
// WinMain 関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Graph, Graph2 ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1 ;
// グラフィックのロード
Graph = LoadGraph( "testDiv.bmp" ) ;
// Graph 中の (0,32)-(32,64) の部分を抜き出し、新たな
// グラフィックハンドルを作成
Graph2 = DerivationGraph( 0, 32, 32, 32, Graph ) ;
// 新たに作成したグラフィックハンドルで描画
DrawGraph( 100, 100, Graph2, TRUE ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面にでたらめに1000個の点を描き、その画面を取りこむ
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
int i ;
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;
// 1000個の点を描く
for( i = 0 ; i < 1000 ; i ++ )
{
// ランダムな位置に点を描く(『GetRand』を使用)
DrawPixel( GetRand( 639 ) , GetRand( 479 ) , Cr ) ;
}
// 画面のサイズと同じサイズのグラフィックを作成
GHandle = MakeGraph( 640 , 480 ) ;
// 画面データの取りこみ
GetDrawScreenGraph( 0 , 0 , 640 , 480 , GHandle ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmpをメモリに読み込み、そのサイズを取得する、上記の例を 無意味にもソフトプログラム化したものです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
int GSizeX , GSizeY ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックのサイズを得る
GetGraphSize( GHandle , &GSizeX , &GSizeY ) ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル BMPをロードして表示したり作成したりした後これらのグラフィックを 削除する。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle , GHandle2 ;
int i ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 適当な座標に10回描画
for( i = 0 ; i < 10 ; i ++ )
{
// 画像をランダムな座標に描画する(『GetRand』使用)
DrawGraph( GetRand( 639 ), GetRand( 479 ), GHandle, TRUE ) ;
}
// 空のグラフィックを作成
GHandle2 = MakeGraph( 128 , 128 ) ;
// 適当な領域を取りこむ
GetDrawScreenGraph( 156 , 24 , 156 + 128 , 24 + 128 , GHandle2 ) ;
// 取り込んだ画像で10回描画
for( i = 0 ; i < 10 ; i ++ )
{
// 画像をランダムな座標に描画する(『GetRand』使用)
DrawGraph( GetRand( 639 ), GetRand( 479 ), GHandle2, TRUE ) ;
}
// 全グラフィックを初期化
InitGraph() ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmpをメモリに読み込み、画面左上に透過色有効で描画した後 メモリ上から削除する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 読みこんだグラフィックを画面左上に描画
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
// 描画が終ったのでグラフィックをメモリ上から削除する
DeleteGraph( GHandle ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmp(サイズ130×480)を読み込みネアレストネイバー法と バイリニア法で描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 描画モードをネアレストネイバー法にする
SetDrawMode( DX_DRAWMODE_NEAREST ) ;
// 読みこんだグラフィックを画面左上に拡大描画
DrawExtendGraph( 0 , 0 , 130 * 2 , 480 * 2 , GHandle , FALSE ) ;
// 描画モードをバイリニア法にする
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;
// 読みこんだグラフィックを先ほどの隣に描画
DrawExtendGraph( 260 , 0 , 260 + 130 * 2 , 480 * 2 , GHandle , FALSE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル back.bmpとtest1.bmpを読み込みそれぞれノーブレンドと アルファブレンドと加算ブレンドと減算ブレンドと乗算ブレンドで描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int TestHandle , BackHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
TestHandle = LoadGraph( "test1.bmp" ) ;
// back.bmpの読み込み
BackHandle = LoadGraph( "back.bmp" ) ;
// 描画ブレンドモードをノーブレンドにする
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
// 背景を描画
DrawGraph( 0 , 0 , BackHandle , FALSE ) ;
// 上に載せるグラフィックを描画
DrawGraph( 255 , 0 , TestHandle , TRUE ) ;
// キー待ち(『WaitKey』を使用)
WaitKey() ;
// 背景を描画
DrawGraph( 0 , 0 , BackHandle , FALSE ) ;
// 描画ブレンドモードをアルファブレンド(50%)にする
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 128 ) ;
// 上に載せるグラフィックを描画
DrawGraph( 255 , 0 , TestHandle , TRUE ) ;
// キー待ち(『WaitKey』を使用)
WaitKey() ;
// 描画ブレンドモードをノーブレンドにする
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
// 背景を描画
DrawGraph( 0 , 0 , BackHandle , FALSE ) ;
// 描画ブレンドモードを加算ブレンド(100%)にする
SetDrawBlendMode( DX_BLENDMODE_ADD , 255 ) ;
// 上に載せるグラフィックを描画
DrawGraph( 255 , 0 , TestHandle , TRUE ) ;
// キー待ち(『WaitKey』を使用)
WaitKey() ;
// 描画ブレンドモードをノーブレンドにする
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
// 背景を描画
DrawGraph( 0 , 0 , BackHandle , FALSE ) ;
// 描画ブレンドモードを減算ブレンド(80%)にする
SetDrawBlendMode( DX_BLENDMODE_SUB , 204 ) ;
// 上に載せるグラフィックを描画
DrawGraph( 255 , 0 , TestHandle , TRUE ) ;
// キー待ち((7-3)『WaitKey』を使用)
WaitKey() ;
// 描画ブレンドモードをノーブレンドにする
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
// 背景を描画
DrawGraph( 0 , 0 , BackHandle , FALSE ) ;
// 描画ブレンドモードを乗算ブレンドにする
SetDrawBlendMode( DX_BLENDMODE_MUL , 0 ) ;
// 上に載せるグラフィックを描画
DrawGraph( 255 , 0 , TestHandle , TRUE ) ;
// キー待ち((7-3)『WaitKey』を使用)
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test1.bmpを読み込み赤の色要素のみで描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test1.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// 描画輝度を赤のみにセット
SetDrawBright( 255 , 0 , 0 ) ;
// グラフィックの描画
DrawGraph( 0 , 0 , GHandle , FALSE ) ;
// キー待ち(『WaitKey』を使用)
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル R:255 G:0 B:255 の色を透過色にしてtest4.bmpを画面に描画する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 透過色を変更
SetTransColor( 255 , 0 , 255 ) ;
// BMP画像のメモリへの読みこみ
GHandle = LoadGraph( "test4.bmp" ) ;
// 画面左上に描画します((3-7)『DrawGraph』を使用)
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
// キーの入力待ち((6-3)『WaitKey』を使用)
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル Scene1.jpg から Scene2.jpg への画面の切り替えを、ブレンド画像機能を使って行う(ブレンド画像に BlendGraph.bmp を使用)
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int BlendGraph, GrHandle1, GrHandle2 ;
int i ;
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1 ;
// 裏画面を使用
SetDrawScreen( DX_SCREEN_BACK ) ;
// ブレンド画像を読み込む
BlendGraph = LoadBlendGraph( "BlendGraph.bmp" ) ;
// 二つの画像の読み込み
GrHandle1 = LoadGraph( "Scene1.jpg" ) ;
GrHandle2 = LoadGraph( "Scene2.jpg" ) ;
// 256 フレーム掛けて切り替え
for( i = 0 ; i < 256 ; i ++ )
{
// メッセージ処理
if( ProcessMessage() != 0 ) break ;
// Scene2.jpg を描画
DrawGraph( 0, 0, GrHandle2, FALSE ) ;
// Scene1.jpg と BlendGraph.bmp を合成して描画
// (境界幅は 64)
DrawBlendGraph( 0, 0, GrHandle1, FALSE, BlendGraph, i, 64 ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル LoadBlendGraph関数 のサンプルを参照してください。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
<<各フィルターの説明>> DX_GRAPH_FILTER_MONO:モノトーンフィルタ 引数 int Cb : 青色差( -255 〜 255 ) int Cr : 赤色差( -255 〜 255 ) 解説 画像をモノトーン調に変化させることができるフィルターです。 各ピクセルの色をRGB形式からYCbCr形式に変換して、その上ですべてのピクセルの輝度以外の成分を 引数の Cb Cr の値を置き換えた後、再びRGB形式に戻します。 値の調整が難しいですが、似たような効果を得ることができる DX_GRAPH_FILTER_HSB より負荷は低いです。 サンプル 画像 Src1.bmp をモノトーンフィルタを使用してセピア調の画像に変換してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// モノトーンフィルターでセピア調の画像に変換
GraphFilter( Handle, DX_GRAPH_FILTER_MONO, -60, 7 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
DX_GRAPH_FILTER_GAUSS:ガウスフィルタ 引数 int PixelWidth : 使用ピクセル幅( 8 , 16 , 32 の何れか ) int Param : ぼかしパラメータ( 100 で約1ピクセル分の幅 ) 解説 画像にガウス関数を使用したぼかし効果を与えることができるフィルターです。 Param の値の大きさでぼかしの強さが変化しますが、ぼかせる度合いには限界があります。 ぼかしの限界は PixelWidth の値の大きさで決まり、PixelWidth の値が大きいほどぼかしの強さの限界が大きくなり、 それとともに処理負荷も大きくなります。 このフィルタは非常に負荷が大きいので、強いぼかしをかけたい場合は PixelWidth の値を 32 にして強いぼかしを 掛けるより、縮小フィルタ( DX_GRAPH_FILTER_DOWN_SCALE )で画像を縮小した後弱いぼかしを掛け、 その後 DrawExtendGraph で元の大きさで描画する、という方法を採ったほうが処理負荷を小さく抑えることができます。 <<注意>> サイズが 2 の n乗のドット数( 1,2,4,8,16,32,64,128,256,512,1024 )ぴったりではない画像に対してガウスフィルタを掛けると、 画像の端に、画像には無い色が滲み出たりすることがあります。 こちらは今のところ仕様となりますので、この現象を回避する場合はガウスフィルタを掛ける画像は2のn乗サイズにするか、 若しくは画像のサイズを少し必要なサイズより大きめにして滲んだ部分を使わないという方法で対処してください。 サンプル 画像 Src1.bmp をガウスフィルタを使用してぼかした画像に変換してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// 画面モードを32bitカラーにする
SetGraphMode( 640, 480, 32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// ガウスフィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_GAUSS, 16, 1400 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
DX_GRAPH_FILTER_DOWN_SCALE:縮小フィルタ 引数 int DivNum : 元のサイズの何分の1か、という値( 2 , 4 , 8 の何れか ) 解説 画像を綺麗に縮小するためのフィルターです。 DrawExtendGraph でも縮小描画することができますが、それよりも綺麗に縮小した画像を得ることができます。 主にガウスフィルタ( DX_GRAPH_FILTER_GAUSS )の処理負荷を下げる目的で使用されることを想定しています。 サンプル 画像 Src1.bmp を4分の1のサイズに縮小してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// ガウスフィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_DOWN_SCALE, 4 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像![]() 変換後( 左 )と DrawExtendGraph の縮小結果( 右 )
DX_GRAPH_FILTER_BRIGHT_CLIP:明るさクリップフィルタ 引数 int CmpType : クリップタイプ DX_CMP_LESS CmpParamより小さい場合クリップ DX_CMP_GREATER CmpParamより大きい場合クリップ int CmpParam : クリップパラメータ( 0 〜 255 ) int ClipFillFlag : クリップしたピクセルを塗りつぶすかどうか ( TRUE:塗りつぶす FALSE:塗りつぶさない ) int ClipFillColor : クリップしたピクセルに塗る色値( GetColor で取得できる値 ) ( ClipFillFlag が FALSE の場合は使用されません ) int ClipFillAlpha : クリップしたピクセルに塗るアルファ値( 0 〜 255 ) ( ClipFillFlag が FALSE の場合は使用されません ) 解説 画像の各ピクセルを輝度に応じて引数で渡す色で塗りつぶすフィルターです。 まず各ピクセルの色から輝度を算出して、その値が CmpType が DX_CMP_LESS の場合は CmpParam より小さかったら、CmpType が DX_CMP_GRATER の場合は CmpParam より大きかったら クリップ処理が行われます。 クリップ処理は ClipFillFlag が TRUE かどうかで処理が別れます。 FALSE の場合は単純に出力先の画像にそのピクセルが書き込まれません。ただ、GraphFilter 関数は 入力元と出力先が同じなので、何も変化しないことになります。なので、ClipFillFlag を FALSE にする 意味があるのは入力元と出力先を別にできる関数 GraphFilterBlt や GraphFilterRectBlt を 使用した場合のみとなります。 ClipFillFlag が TRUE の場合は、クリップ処理としてクリップ判定されたピクセルに元画像の ピクセルの色の代わりに ClipFillColor で指定した色が、出力先画像にアルファチャンネルが ある場合は元画像のピクセルのアルファ値の代わりに ClipFillAlpha が出力先に書き込まれます。 サンプル 画像 Src1.bmp の輝度50%以下の部分を緑色にしてから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// 明るさクリップフィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_BRIGHT_CLIP, DX_CMP_LESS, 128, TRUE, GetColor( 0, 255, 0 ), 255 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
DX_GRAPH_FILTER_HSB:色相・彩度・明度フィルタ 引数 int HueType : Hue の意味( 0:相対値 1:絶対値 ) int Hue : 色相 ( HueType が 0 の場合はピクセルの色相に対する相対値( -180 〜 180 ) HueType が 1 の場合は色相の絶対値( 0 〜 360 ) ) int Saturation : 彩度( -255 〜 ) int Bright : 輝度( -255 〜 255 ) 解説 画像の各ピクセルのRGBの値から色相・彩度・輝度の値を算出して、それに対して引数の Hue、Saturation、Bright を加えることで画像の色相や彩度、輝度を補正するフィルターです。 まず HueType を 0 にするか 1 にするかで結果が大きく変化します。 0 にした場合は元の色相の値に対して Hue の値を加算するのに対して、1 にした場合は元の色相の値を 無視して Hue の値に置き換えるのですべてのピクセルが同じ色相となり、結果としてモノトーン調の 出力結果になります。 Hue の値は色相です、色相は青、赤、緑の色合い 0 〜 360 の数値で表したもので、0 は赤、 120が緑、240が青、360が再び赤、というようになっています。この値に変化を加えることで 色合いを変えることができます。HueType が 0 か 1 かによって指定できる値の範囲と意味が変化して、 HueType が 0 の場合は元の色相に対する相対値となるので指定できる値は -180 から 180 になります。 HueType が 1 の場合は、元の色相を無視した絶対値となるので指定できる値は 0 から 360 となります。 Saturation は彩度です、彩度は高ければ高いほど鮮やかな色に近づき、低ければ低いほどグレーに近くなります。 Saturation は必ず元の彩度に対する相対値の指定になりますので、特に彩度を変更したくない場合は 0 を指定します。 Bright は輝度です、この値を 0 以下にすると出力結果が黒に近くなり、0 以上にすると出力結果が 白に近くなります。0 を指定すれば元画像と同じ輝度で出力されます。 サンプル 画像 Src1.bmp の水面の色を紫色に変化させ、彩度を上げて輝度を下げてから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// 色相・彩度・輝度フィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_HSB, 0, 100, 90, -60 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後 ![]() 色相を固定した場合としない場合の違い 固定した場合
固定しない場合![]() ( 固定した場合はすべてのピクセルの色相が同じになり、固定しない場合は各ピクセル色相が独立します ) DX_GRAPH_FILTER_INVERT:階調の反転フィルタ 引数 なし 解説 画像の各ピクセルのRGBの値を反転するフィルタです。 サンプル 画像 Src1.bmp の色を反転してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// 階調反転フィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_INVERT ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
DX_GRAPH_FILTER_LEVEL:レベル補正フィルタ 引数 int Min : 変換元の下限値( 0 〜 255 ) int Max : 変換元の上限値( 0 〜 255 ) int Gamma : ガンマ値( 100 で 1.0 を表し、ガンマ補正無し、1 より小さい値は不可 ) int AfterMin : 変換後の最低値( 0 〜 255 ) int AfterMax : 変換後の最大値( 0 〜 255 ) 解説 画像にレベル補正を行うフィルタです、輝度分布が偏っていて締まりの無い画像のコントラストを上げたりできます。 Min の値を 0 以上にすると全体的に画像が暗い方向に傾き、白っぽくなってしまっている画像を引き締めます。 Max の値を 255 以下にすると全体的に画像が明るい方向に傾き、暗くなってしまっている画像を明るくします。 Gamma の値を 100 以上にすると画像が明るくなります。( Max の値を下げるのとは違う変化です ) Gamma の値を 100 以下にすると画像が暗くなります。( Min の値を上げるのとは違う変化です ) AfterMin の値を 0 以上にすると、画像が全体的に白っぽくなります。 AfterMax の値を 255 以下にすると、画像が全体的に黒に近くなります。 サンプル 画像 Src1.bmp をレベル補正フィルタを使用してコントラストと鮮やかさを上げてから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// レベル補正フィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_LEVEL, 60, 210, 120, 0, 255 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
DX_GRAPH_FILTER_TWO_COLOR:2階調化フィルタ 引数 int Threshold : 閾値( 0 〜 255 ) int LowColor : 閾値より値が低かったピクセルの変換後の色値( GetColor で取得できる値 ) int LowAlpha : 閾値より値が低かったピクセルの変換後のアルファ値( 0 〜 255 ) int HighColor : 閾値より値が高かったピクセルの変換後の色値( GetColor で取得する ) int HighAlpha : 閾値より値が高かったピクセルの変換後のアルファ値( 0 〜 255 ) 解説 画像を2階調化するフィルターです。 画像の各ピクセルの色から 0 〜 255 の輝度値を算出し、その値が Threshold で指定した値以上かどうかで 変換後の色が LowColor, LowAlpha になるか、 HighColor, HighAlpha になるかが決まります。 引数の説明以上に引数について解説できることはアルファチャンネルを持たない画像に対しては LowAlpha と HighAlpha の引数は特に使われないということくらいです。 サンプル 画像 Src1.bmp を2階調化フィルタで輝度が50%以下の部分を暗い青に、 50%以上の部分を黄色にしてから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// 2階調化フィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_TWO_COLOR, 128, GetColor( 0, 0, 128 ), 255, GetColor( 255, 255, 0 ), 255 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
DX_GRAPH_FILTER_GRADIENT_MAP:グラデーションマップフィルタ 引数 int MapGrHandle : グラデーションマップとして使用するグラフィックハンドル、普通に LoadGraph などで作成したハンドル ( 横幅は 256pixelである必要があります、縦幅は何でも( 1pixel でも 100pixel でも )大丈夫です ) int Reverse : グラデーションマップを左右反転して使用するかどうか ( TRUE : 左右反転して使用する FALSE : 左右反転しない ) 解説 画像の各ピクセルの輝度からグラデーションマップのX座標を算出して、その座標の色に変換するフィルターです。 輝度が0の場合はグラデーションマップの一番左上のピクセルの色が( x:0 y:0 座標のピクセル )、 輝度が255( 最大 )だったらグラデーションマップの一番右上のピクセルの色が( x:255 y:0 座標のピクセル ) 出力結果の色となります。 変換元画像のピクセルの輝度によってグラデーションマップ中のX座標を決定しますが、Y座標は常に0ですので、 グラデーションマップ画像は縦幅1ピクセルでも問題ありません。 Reverse を TRUE にすると輝度からグラデーションマップのX座標を算出する結果を反転します。 つまり輝度が最大のときにグラデーションマップ中の一番左上のピクセルが使用され、輝度が最低のときに一番右上の ピクセルが使用されるようになります。 サンプル 画像 Src1.bmp を GMap.bmp をグラデーションマップとして使用してグラデーションマップフィルタを適用した後、 画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
int GradHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// グラデーションマップにする画像を読み込む
GradHandle = LoadGraph( "GMap.bmp" ) ;
// グラデーションマップフィルターを施す
GraphFilter( Handle, DX_GRAPH_FILTER_GRADIENT_MAP, GradHandle, FALSE ) ;
// 画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後 ![]() グラデーションマップとして使用した画像 ![]() 元画像の暗いところほど白く、元画像の明るいところほど青色になります。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画像 Src1.bmp をモノトーンフィルタを使用してセピア調の画像に変換してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int SrcHandle ;
int DestHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
SrcHandle = LoadGraph( "Src1.bmp" ) ;
// 出力先に使用するグラフィックハンドルを作成
DestHandle = MakeScreen( 256, 256, FALSE ) ;
// モノトーンフィルターでセピア調の画像に変換
GraphFilterBlt( SrcHandle, DestHandle, DX_GRAPH_FILTER_MONO, -60, 7 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, DestHandle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像 変換後
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画像 Src1.bmp の右下部分だけをモノトーンフィルタを使用してセピア調の画像に変換してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int SrcHandle ;
int DestHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
SrcHandle = LoadGraph( "Src1.bmp" ) ;
// 出力先に使用するグラフィックハンドルを作成
// ( 右下部分だけで良いので縦横サイズは半分 )
DestHandle = MakeScreen( 128, 128, FALSE ) ;
// 画像の右下部分だけをモノトーンフィルターでセピア調の画像に変換
GraphFilterRectBlt( SrcHandle, DestHandle, 128, 128, 256, 256, 0, 0, DX_GRAPH_FILTER_MONO, -60, 7 ) ;
// 画像を画面に描画
DrawGraph( 0, 0, DestHandle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
<<各ブレンド効果説明>> DX_GRAPH_BLEND_RGBA_SELECT_MIX:RGBAの要素を選択して合成 引数 int SelectR : 出力の赤値となる要素 DX_RGBA_SELECT_SRC_R : GrHandle 画像の赤値 DX_RGBA_SELECT_SRC_G : GrHandle 画像の緑値 DX_RGBA_SELECT_SRC_B : GrHandle 画像の青値 DX_RGBA_SELECT_SRC_A : GrHandle 画像のアルファ値 DX_RGBA_SELECT_BLEND_R : BlendGrHandle 画像の赤値 DX_RGBA_SELECT_BLEND_G : BlendGrHandle 画像の緑値 DX_RGBA_SELECT_BLEND_B : BlendGrHandle 画像の青値 DX_RGBA_SELECT_BLEND_A : BlendGrHandle 画像のアルファ値 int SelectG : 出力の緑値となる要素( 渡せる値の種類は SelectR と同じです ) int SelectB : 出力の青値となる要素( 渡せる値の種類は SelectR と同じです ) int SelectA : 出力のアルファ値となる要素( 渡せる値の種類は SelectR と同じです ) 解説 合成後の画像として赤・緑・青・アルファの各成分を GrHandle の画像、BlendGrHandle の画像のどちらのどの要素から 取ってくるかを指定します。 例えば、SelectR に DX_RGBA_SELECT_BLEND_G を指定した場合は、合成後の画像の赤成分は、BlendGrHandle の緑成分になります。 <<注意>> 尚、このブレンド効果だけは BlendRatio の値が無視され、必ず BlendRatio 255 が指定されたのと同じ 結果になります。 また、GrHandle にアルファチャンネルが含まれていない場合は SelectA の値は無視されます。 ( GrHandle にアルファチャンネルが無いということはアルファ値を格納する領域が無いということなので ) このブレンド効果の主な利用法としてはマスク機能を想定しています。 赤・緑・青のどの成分も合成後の画像のアルファ値とすることができるので、普通の画像や描画結果をマスク画像として 使用することができ、マスク部分の半透明描画も可能なので、既存の DrawMask や DrawFillMask などのマスク関数より 柔軟なマスク機能を実現することができます。 ( ただ、シェーダーモデル2.0が使用できない環境では処理負荷が高くリアルタイム処理には利用できませんが・・・ ) サンプル 画像 Src1.bmp と Src2.tga を合成してから画面に描画します。 Src1.bmp にはアルファチャンネルが無いのでアルファチャンネル付きの描画可能画像のグラフィックハンドルを作成して、 そこに Src1.bmp を描画してから合成しています、合成後の画像は、赤を Src1.bmp の緑成分から、緑を Src1.bmp の 赤成分から、青を Src1.bmp の青成分から( つまり変化なし )、アルファ成分を Src2.tga の赤成分から取ってきています。 ( Src2.tga の緑成分・青成分・アルファ成分はこのサンプルでは使用していません )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
int BlendHandle ;
int AlphaHandle ;
// 画面モードを32bitカラーにする
SetGraphMode( 640, 480, 32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// ブレンドする画像を読み込む
BlendHandle = LoadGraph( "Src2.tga" ) ;
// アルファチャンネル付きの描画可能画像のグラフィックハンドルを作成する
AlphaHandle = MakeScreen( 256, 256, TRUE ) ;
// 描画先を作成したアルファチャンネル付きの描画可能画像にする
SetDrawScreen( AlphaHandle ) ;
// 読み込んだ画像を描画する
DrawGraph( 0, 0, Handle, FALSE ) ;
// 描画先を表画面に戻す
SetDrawScreen( DX_SCREEN_FRONT ) ;
// 描画可能画像とブレンドする画像を合成する
GraphBlend( AlphaHandle, BlendHandle, 255, DX_GRAPH_BLEND_RGBA_SELECT_MIX,
DX_RGBA_SELECT_SRC_G, // 出力結果の赤成分は AlphaHandle の緑成分
DX_RGBA_SELECT_SRC_R, // 出力結果の緑成分は AlphaHandle の赤成分
DX_RGBA_SELECT_SRC_B, // 出力結果の青成分は AlphaHandle の青成分
DX_RGBA_SELECT_BLEND_R // 出力結果のアルファ成分は BlendHandle の赤成分
) ;
// アルファ成分で半透明になることを確かめるために画面全体にグレーの矩形を描画する
DrawBox( 0, 0, 640, 480, GetColor( 128, 128, 128 ), TRUE ) ;
// 描画可能画像を画面に描画
DrawGraph( 0, 0, AlphaHandle, TRUE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像![]() ブレンド画像( 格子の部分は透明を表しています ) ![]() 合成結果
DX_GRAPH_BLEND_NORMAL : 通常 DX_GRAPH_BLEND_MULTIPLE : 乗算 DX_GRAPH_BLEND_DIFFERENCE : 減算 DX_GRAPH_BLEND_ADD : 加算 DX_GRAPH_BLEND_SCREEN : スクリーン DX_GRAPH_BLEND_OVERLAY : オーバーレイ DX_GRAPH_BLEND_DODGE : 覆い焼き DX_GRAPH_BLEND_BURN : 焼き込み DX_GRAPH_BLEND_DARKEN : 比較(暗) DX_GRAPH_BLEND_LIGHTEN : 比較(明) DX_GRAPH_BLEND_SOFTLIGHT : ソフトライト DX_GRAPH_BLEND_HARDLIGHT : ハードライト DX_GRAPH_BLEND_EXCLUSION : 除外 引数 なし 解説 上記の合成タイプは引数が無いので解説を一括します。 ( サンプルプログラムはこの解説の一番下にあります ) 解説で使用する画像は GrHandle がこの画像 ![]() BlendGrHandle がこの画像となります。( 格子の部分は透明な部分です ) ![]() 各タイプの説明の合成結果画像は BlendRatio に 255 を指定した場合の結果です。 <各タイプの説明にある擬似プログラムについて> ・色の値を 0.0 〜 1.0 としたプログラムです。 ・計算結果は 0.0 〜 1.0 にクランプされます。 ・赤・緑・青成分個々に対して同じ処理が実行されます。 ・擬似プログラムの後に共通して以下の処理が行われています 最終結果の色 = GrHandleの色 * ( 1.0 - BlendGrHandleのアルファ値 * BlendRatio ) + 結果の色 * ( BlendGrHandleのアルファ値 * BlendRatio ); ( BlendRatio は 0.0 〜 1.0 となります ) DX_GRAPH_BLEND_NORMAL : 通常 合成に特に特殊効果はありません、BlendRatio が 255 に近いほど BlendGrHandle の画像の不透明度が高くなります。 <<結果算出の擬似プログラム>> 結果の色 = BlendGrHandleの色; ![]() DX_GRAPH_BLEND_MULTIPLE : 乗算 二つの画像の色を乗算します、乗算といっても各成分を 0.0 〜 1.0 の値に見立てて乗算を行うので、 元の色より暗くなることはあっても明るくなることはありません。 <<結果算出の擬似プログラム>> 結果の色 = GrHandleの色 * BlendGrHandleの色; ![]() DX_GRAPH_BLEND_DIFFERENCE : 減算 GrHandle の色から BlendGrHandle の色を引きます。 <<結果算出の擬似プログラム>> 結果の色 = GrHandleの色 - BlendGrHandleの色; ![]() DX_GRAPH_BLEND_ADD : 加算 GrHandle の色に BlendGrHandle の色を足します。 <<結果算出の擬似プログラム>> 結果の色 = GrHandleの色 + BlendGrHandleの色; ![]() DX_GRAPH_BLEND_SCREEN : スクリーン 加算と同じで明るくなりますが、加算ほど明るくなりません。 <<結果算出の擬似プログラム>> 結果の色 = 1.0f - ( ( 1.0f - GrHandleの色 ) * ( 1.0f - BlendGrHandleの色 ) ); ![]() DX_GRAPH_BLEND_OVERLAY : オーバーレイ GrHandle の色の値が 0.5 以下の部分は暗く、0.5 以上の部分は明るくなる合成です。 <<結果算出の擬似プログラム>> if( GrHandleの色 < 0.5 ) { 結果の色 = GrHandleの色 * BlendGrHandleの色 * 2.0; } else { 結果の色 = 2.0 * ( GrHandleの色 + BlendGrHandleの色 - GrHandleの色 * BlendGrHandleの色 ) - 1.0; } ![]() DX_GRAPH_BLEND_DODGE : 覆い焼き 計算は複雑ですが加算と同様に合成後の画像は明るくなります。 <<結果算出の擬似プログラム>> if( BlendGrHandleの色 < 1.0 ) { 結果の色 = GrHandleの色 / ( 1.0 - BlendGrHandleの色 ); } else { 結果の色 = 1.0; } ![]() DX_GRAPH_BLEND_BURN : 焼き込み 計算は複雑ですが乗算と同様に合成後の画像は暗くなります。 <<結果算出の擬似プログラム>> if( BlendGrHandleの色 > 0 ) { 結果の色 = 1.0 - ( 1.0 - GrHandleの色 ) / BlendGrHandleの色 ; } else { 結果の色 = 0.0; } ![]() DX_GRAPH_BLEND_DARKEN : 比較(暗) GrHandle と BlendGrHandle で色の暗い方を合成後の色とします。 <<結果算出の擬似プログラム>> if( BlendGrHandleの色 > GrHandleの色 ) { 結果の色 = GrHandleの色 ; } else { 結果の色 = BlendGrHandleの色 ; } ![]() DX_GRAPH_BLEND_LIGHTEN : 比較(明) GrHandle と BlendGrHandle で色の明るい方を合成後の色とします。 <<結果算出の擬似プログラム>> if( BlendGrHandleの色 > GrHandleの色 ) { 結果の色 = BlendGrHandleの色 ; } else { 結果の色 = GrHandleの色 ; } ![]() DX_GRAPH_BLEND_SOFTLIGHT : ソフトライト オーバーレイより少し暗い感じです。 <<結果算出の擬似プログラム>> if( BlendGrHandleの色 < 0.5 ) { 結果の色 = pow( GrHandleの色, ( 1.0f - BlendGrHandleの色 ) * 2.0 ) ; } else { 結果の色 = pow( GrHandleの色, 0.5 / BlendGrHandleの色 ); } ![]() DX_GRAPH_BLEND_HARDLIGHT : ハードライト オーバーレイは GrHandle の値が 0.5 以上かどうかを判断していましたが、 ハードライトでは BlendGrHandle の値を 0.5 以上かどうかを判断に使用しています。 <<結果算出の擬似プログラム>> if( BlendGrHandleの色 < 0.5 ) { 結果の色 = GrHandleの色 * BlendGrHandleの色 * 2.0; } else { 結果の色 = 2.0 * ( GrHandleの色 + BlendGrHandleの色 - GrHandleの色 * BlendGrHandleの色 ) - 1.0; } ![]() DX_GRAPH_BLEND_EXCLUSION : 除外 減算に若干似ています。 <<結果算出の擬似プログラム>> 結果の色 = GrHandleの色 + BlendGrHandleの色 - 2.0 * GrHandleの色 * BlendGrHandleの色; ![]() サンプル 画像 Src1.bmp と Src2.tga をオーバーレイ合成してから画面に描画します。 この一括解説で扱われた合成タイプはすべて引数がありませんので、このサンプルの DX_GRAPH_BLEND_OVERLAY の部分を他の合成タイプに置き換えればそのままその合成タイプの サンプルとして見立てることができます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Handle ;
int BlendHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
Handle = LoadGraph( "Src1.bmp" ) ;
// ブレンドする画像を読み込む
BlendHandle = LoadGraph( "Src2.tga" ) ;
// Handle と BlendHandle でオーバーレイ合成を行う
GraphBlend( Handle, BlendHandle, 255, DX_GRAPH_BLEND_OVERLAY ) ;
// 合成後の画像を画面に描画
DrawGraph( 0, 0, Handle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画像 Src1.bmp と Src2.tga を覆い焼き合成してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int SrcHandle ;
int DestHandle ;
int BlendHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
SrcHandle = LoadGraph( "Src1.bmp" ) ;
// ブレンドする画像を読み込む
BlendHandle = LoadGraph( "Src2.tga" ) ;
// 出力先のグラフィックハンドルを作成する
DestHandle = MakeScreen( 256, 256, FALSE ) ;
// Handle と BlendHandle で覆い焼き合成を行う
GraphBlendBlt( SrcHandle, BlendHandle, DestHandle, 255, DX_GRAPH_BLEND_DODGE ) ;
// 合成後の画像を画面に描画
DrawGraph( 0, 0, DestHandle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
元画像![]() ブレンド画像 ![]() 合成後
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画像 Src1.bmp の右下部分と Src2.tga の中心部分を覆い焼き合成してから画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int SrcHandle ;
int DestHandle ;
int BlendHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
SrcHandle = LoadGraph( "Src1.bmp" ) ;
// ブレンドする画像を読み込む
BlendHandle = LoadGraph( "Src2.tga" ) ;
// 出力先のグラフィックハンドルを作成する
DestHandle = MakeScreen( 128, 128, FALSE ) ;
// Handle と BlendHandle で覆い焼き合成を行う
GraphBlendRectBlt( SrcHandle, BlendHandle, DestHandle, 128, 128, 256, 256, 64, 64, 0, 0, 255, DX_GRAPH_BLEND_DODGE ) ;
// 合成後の画像を画面に描画
DrawGraph( 0, 0, DestHandle, FALSE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
| ||||||||||||||||||||||||||||
|
文字描画関係関数 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面の中心に文字列を描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 250 , 240 - 32 , "Hello C World!" , Cr );
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル メッセージを表示してからボタンが押されるまでの時間を描画します。
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Start , Time ;
int Cr ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return 0;
// 白の色コードを保存
Cr = GetColor( 255 , 255, 255 ) ;
// スタートタイムを取得
Start = GetNowCount() ;
// メッセージを表示
DrawString( 0 , 0 , "なにかキーを押してください" , Cr ) ;
// ボタンが押されるまで待つ
WaitKey() ;
// 終了、経過時間を算出
Time = GetNowCount() - Start ;
// 画面に表示
ClearDrawScreen() ;
DrawFormatString( 0, 0, Cr, "ボタンが押されるまでに %dミリ秒経過しました", Time ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリ使用の終了
DxLib_End() ;
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 一つの文章を同じ列に2回にわけて描画します
#include <string.h>
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int StrWidth , StrLen ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1 ;
// 最初の文字列を描画
DrawString( 0 , 0 , "今日もいい天気だ" , GetColor( 255 , 255 , 255 ) ) ;
// 文字列の長さを取得
StrLen = strlen( "今日もいい天気だ" ) ;
// 描画時の文字列の幅を取得
StrWidth = GetDrawStringWidth( "今日もいい天気だ" , StrLen ) ;
// 「今日もいい天気だ」の直後に新たな文字列を描画
DrawString( StrWidth , 0 , "明日も晴れると良いなあ" , GetColor( 255 , 255 , 255 ) ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの使用終了
DxLib_End() ;
// 終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル フォントのサイズを64にし、画面中心に文字列を描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画する文字列のサイズを設定
SetFontSize( 64 ) ;
// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 100 , 240 - 42 , "Hello C World!" , Cr );
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル フォントの太さを3にし、文字列を描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画する文字列の太さを設定
SetFontThickness( 3 ) ;
// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 100 , 240 - 42 , "Hello C World!" , Cr );
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル フォントをMS明朝にして文字列を描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画する文字列の文字セットを変更します
ChangeFont( "MS 明朝" ) ;
// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 100 , 240 - 42 , "Hello C World!" , Cr );
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 最初にサイズ40で『DXライブラリ』と描画した後、フォントの タイプをエッジつきアンチエイリアスフォントに変更してもう一度 『DXライブラリ』と描画します。
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return 0 ;
// 画面を黄色で塗りつぶします
DrawBox( 0 , 0 , 640 , 480 , GetColor( 128,128, 0) , TRUE ) ;
// サイズを40に変更
SetFontSize( 40 ) ;
// 『DXライブラリ』と描画
DrawString( 100 , 100 , "DXライブラリ" , GetColor( 255,255,255 ) ) ;
// フォントのタイプをエッジつきアンチエイリアスフォントに変更
ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE ) ;
// 『DXライブラリ』と描画
DrawString( 100 , 160 , "DXライブラリ" , GetColor( 255,255,255 ), GetColor( 0,0,0 ) ) ;
// キー入力を待つ
WaitKey() ;
// DXライブラリの終了
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル まずサイズ40、太さ3のフォントを作成し、そのフォントで画面に 『HELLOW!!』と描画します。そのあと標準のフォントデータで 『OK?』と言う文字列を描画します。
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int FontHandle ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return 0 ;
// デフォルトのフォントで、サイズ40、太さ3のフォントを作成し
// 作成したデータの識別番号を変数 FontHandle に保存する
FontHandle = CreateFontToHandle( NULL , 40 , 3 ) ;
// 作成したフォントで画面左上に『Hellow!!』と白色の文字列を描画する
DrawStringToHandle( 0 , 0 , "HELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle ) ;
// 次に標準フォントデータで画面に『OK?』という文字列を描画する
DrawString( 0 , 50 , "OK?" , GetColor( 255 , 128 , 100 ) ) ;
// キー入力を待つ
WaitKey() ;
// 作成したフォントデータを削除する
DeleteFontToHandle( FontHandle ) ;
// DXライブラリの終了
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル CreateFontToHandle 関数のサンプルを参照してください。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル CreateFontToHandle 関数のサンプルを参照してください。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 動作については DrawFormatString 関数を参照して下さい。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 動作の挙動については GetDrawStringWidth 関数のサンプルを参照して ください | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 動作の挙動については GetDrawFormatStringWidth 関数を参照して ください | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません。 | ||||||||||||||||||||||||||||
| 簡易画面出力関数 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面に適当に文字列を出力する
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリ初期化
if( DxLib_Init() == -1 ) return 0;
// Hello C World!と表示、最後に改行
printfDx( "Hello C World!\n" ) ;
// 画面に適当に数値を描画
printfDx( " 600 x 800 = %d \n" , 600 * 800 ) ;
// 画面が降り切れるほど文字列を描画
printfDx( "実験実験実験実験実験実験実験実験実験" ) ;
printfDx( "実験実験実験実験実験実験実験実験実験" ) ;
printfDx( "実験実験実験実験実験実験実験実験実験実験" ) ;
// 画面を青くする
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 0 , 255 ) , TRUE ) ;
// 出力した文字列を表示
ScreenFlip() ;
// キーが押されるまで待つ
WaitKey() ;
// DXライブラリの使用終了
DxLib_End() ;
return 0 ;
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面に延々と文字列を表示しつづけ、キーが押されたら文字列を一掃します
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリ初期化
if( DxLib_Init() == -1 ) return 0;
// 描画先画面を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// なにかキーが押されるまでループ
while( CheckHitKeyAll() == 0 )
{
// Hello C World!と表示
printfDx( "Hello C World" ) ;
// 画面を青くする
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 0 , 255 ) , TRUE ) ;
// 出力した文字列を表示
ScreenFlip() ;
// Windows依存処理
if( ProcessMessage() == -1 ) break ;
}
// 画面の文字達を消す
clsDx() ;
// 画面にメッセージを表示
printfDx( "消えましたか?" ) ;
// 画面を赤くする
DrawBox( 0 , 0 , 640 , 480 , GetColor( 255 , 0 , 0 ) , TRUE ) ;
// 画面の状態を更新
ScreenFlip() ;
// キーが押されるまで待つ
WaitKey() ;
// DXライブラリの使用終了
DxLib_End() ;
return 0 ;
}
| ||||||||||||||||||||||||||||
| その他画面操作系関数 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 解像度800×600、カラービット数32ビットで起動し、グラフィックを グラフィックを読み込み描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 画面モードの変更
SetGraphMode( 800 , 600 , 32 ) ;
// test.bmpの読み込み
GHandle = LoadGraph( "test1.bmp" ) ;
// グラフィックの描画
DrawGraph( 0 , 0 , GHandle , FALSE ) ;
// キー待ち(『WaitKey』を使用)
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 画面の半分を描画不可能にして画面全体に青い四角を描画しようとする
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画可能領域セット
SetDrawArea( 0 , 0 , 320 , 480 ) ;
// 青色の値を取得
Cr = GetColor( 0 , 0 , 255 ) ;
// 青い四角形の描画
DrawBox( 0 , 0 , 640 , 480 , Cr , TRUE ) ;
// キー待ち(『WaitKey』を使用)
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ランダムな座標で1000個の点を描画した後画面を消去します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int i ;
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;
// 1000個の点を描く
for( i = 0 ; i < 1000 ; i ++ )
{
// ランダムな位置に点を描く(『GetRand』を使用)
DrawPixel( GetRand( 639 ) , GetRand( 479 ) , Cr ) ;
}
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
// 画面を初期化
ClearDrawScreen() ;
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 灰色の線を描く
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Cr ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 灰色の値を取得
Cr = GetColor( 128 , 128 , 128 ) ;
// 線の描画
DrawLine( 120 , 150 , 300 , 240 , Cr );
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 最初に表画面を描画先にしてランダムに四角形を描き続き、次に 描画先を裏画面にして同じことをしてみます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int i ;
int Cr ;
int x , y ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画先画面を表にする
SetDrawScreen( DX_SCREEN_FRONT ) ;
// 10000個四角形を描きます
for( i = 0 ; i < 10000 ; i ++ )
{
// ランダムな色を取得する『GetRand』使用
Cr = GetColor( GetRand( 255 ) , GetRand( 255 ) , GetRand( 255 ) ) ;
// ランダムな位置に四角形を描く
x = GetRand( 639 ) ;
y = GetRand( 479 ) ;
DrawBox( x , y , x + GetRand( 639 ) , y + GetRand( 479 ) , Cr , TRUE ) ;
}
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
// 画面を初期化
ClearDrawScreen() ;
// 描画先画面を裏にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 10000個四角形を描きます
for( i = 0 ; i < 10000 ; i ++ )
{
// ランダムな色を取得する『GetRand』使用
Cr = GetColor( GetRand( 255 ) , GetRand( 255 ) , GetRand( 255 ) ) ;
// ランダムな位置に四角形を描く
x = GetRand( 639 ) ;
y = GetRand( 479 ) ;
DrawBox( x , y , x + GetRand( 639 ) , y + GetRand( 479 ) , Cr , TRUE ) ;
}
// 裏画面の内容を表画面に反映します
ScreenFlip() ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 『SetDrawScreen』関数の解説を参照してください | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル フルスクリーンアンチエイリアスを有効にした状態で DxChara.x を読み込み、画面に表示します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// フルシーンアンチエイリアスを設定する
SetFullSceneAntiAliasingMode( 4, 2 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 描画先を裏画面に設定
SetDrawScreen( DX_SCREEN_BACK ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||||||||||||||||
| マスク関係関数 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル マスク画面を作成し、マスクデータを testMask.bmp から読みこみ、 マスク画面の左上に描画した後、画面を赤色で埋め尽くします。 するとマスクを描画した画面左上の部分だけ赤くなりません。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータをロードします
MaskHandle = LoadMask( "testMask.bmp" ) ;
// ロードしたマスクデータを画面の左上に描画します
DrawMask( 0 , 0 , MaskHandle , DX_MASKTRANS_NONE ) ;
// 画面いっぱいに赤い四角を描きます
DrawBox( 0 , 0 , 640 , 480 , GetColor( 255 , 0 , 0 ) , TRUE ) ;
// キーの入力待ちをします
WaitKey() ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル CreateMaskScreen のサンプルを参照して下さい | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル testMask.bmp を読みこみ画面上のランダムな場所に10回描画し、その後 画面全体を青い四角で描画する。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle ;
int i ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータをロードします
MaskHandle = LoadMask( "testMask.bmp" ) ;
// ロードしたマスクデータを画面のランダムな位置に10個描画します
for( i = 0 ; i < 10 ; i ++ )
DrawMask( GetRand( 639 ) , GetRand( 479 ) , MaskHandle , DX_MASKTRANS_NONE ) ;
// 画面いっぱいに青い四角を描きます
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 0 , 255 ) , TRUE ) ;
// キーの入力待ちをします
WaitKey() ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル testMask2.bmp を 横 8 縦 2 、分割される一つの画像サイズを 8 × 16 、分割 画像の総数 16 として読みこみ、得られたマスクハンドルを配列に保存しその後 0から順番に画面全体にマスクグラフィックを描画しアニメーションさせます。 いちいち画面を消去するので裏画面を使用しています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle[ 16 ] ;
int i ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画先画面を裏画面にします
SetDrawScreen( DX_SCREEN_BACK ) ;
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータをロードします
LoadDivMask( "testMask2.bmp", 16, 8, 2, 8, 16, MaskHandle ) ;
// マスクを画面全体にタイル上に描画しアニメーションさせます
for( i = 0 ; i < 16 ; i ++ )
{
// 画面初期化
ClearDrawScreen() ;
// 画面全体にタイル上描画
DrawFillMask( 0 , 0 , 640 , 480 , MaskHandle[ i ] ) ;
// 画面いっぱいに青い四角を描きます
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 0 , 255 ) , TRUE ) ;
// 時間待ち
WaitTimer( 100 ) ;
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
// 最後の時間待ち
WaitTimer( 1000 ) ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル CreateMaskScreen 関数のサンプルを参照して下さい。 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル (100,200)-(640,480)の領域を testMask.bmp から構築したマスクで 埋めます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータをロードします
MaskHandle = LoadMask( "testMask.bmp" ) ;
// (100,200)-(400,400)の領域にマスクをタイル上に並べて描画します
DrawFillMask( 100 , 200 , 400 , 400 , MaskHandle ) ;
// 画面いっぱいに緑の四角を描画
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 255 , 0 ) , TRUE ) ;
// キー入力待ち
WaitKey() ;
// マスクを削除します
DeleteMask( MaskHandle ) ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル DrawFillMask 関数のサンプルを参照して下さい | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル DrawFillMask 関数で一部マスクを適用し、緑の四角を描画した後、 マスク画面を白で覆い尽くしてから再び緑の四角を描画します
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータをロードします
MaskHandle = LoadMask( "testMask.bmp" ) ;
// (100,200)-(400,400)の領域にマスクをタイル上に並べて描画します
DrawFillMask( 100 , 200 , 400 , 400 , MaskHandle ) ;
// 画面いっぱいに緑の四角を描画
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 255 , 0 ) , TRUE ) ;
// キー入力待ち
WaitKey() ;
// マスク画面を白で覆い尽くします
FillMaskScreen( 1 ) ;
// もう一度画面いっぱいに緑の四角を描きます
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 255 , 0 ) , TRUE ) ;
// キー入力待ち
WaitKey() ;
// マスクを削除します
DeleteMask( MaskHandle ) ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル まず testMask.bmp を DrawFillMask 関数をもって画面全体に描画します。 その後緑の四角を画面全体に、以後マスク画面を無効にして同じことを、更に再び マスク画面を有効にして再度緑の四角を画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータをロードします
MaskHandle = LoadMask( "testMask.bmp" ) ;
// 画面全体にマスクをタイル上に並べて描画します
DrawFillMask( 0 , 0 , 640 , 480 , MaskHandle ) ;
// 画面いっぱいに緑の四角を描画
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 255 , 0 ) , TRUE ) ;
ScreenFlip() ;
// キー入力待ち
WaitKey() ;
// マスク画面を無効にします
SetUseMaskScreenFlag( FALSE );
// もう一度画面いっぱいに緑の四角を描きます
ClearDrawScreen() ; // 画面初期化
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 255 , 0 ) , TRUE ) ;
ScreenFlip() ;
// キー入力待ち
WaitKey() ;
// マスク画面を有効にします
SetUseMaskScreenFlag( TRUE ) ;
// 再び一度画面いっぱいに緑の四角を描きます
ClearDrawScreen() ; // 画面初期化
DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 255 , 0 ) , TRUE ) ;
ScreenFlip() ;
// キー入力待ち
WaitKey() ;
// マスクを削除します
DeleteMask( MaskHandle ) ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル MakeMask 関数で 16 × 16 の大きさの空マスクを作成し、プログラム中で 動的に作成、変更を加えたマスクデータを SetDataToMask 関数 で順次転送、 そしてそのマスクデータを持ってマスク画面を埋め尽くし、マスクの結果を 確認するために画面いっぱいに白い四角を描画しています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MaskHandle ;
unsigned char MaskData[ 16 ][ 16 ] ;
int i , j ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画先を裏画面にします
SetDrawScreen( DX_SCREEN_BACK ) ;
// マスク画面を作成します
CreateMaskScreen() ;
// 空のマスクを作成します
MaskHandle = MakeMask( 16 , 16 ) ;
// マスクデータを白で埋めます
for( i = 0 ; i < 16 ; i ++ )
for( j = 0 ; j < 16 ; j ++ )
MaskData[ i ][ j ] = 0xff ;
// ループ
for( i = 0 ; i < 16 ; i ++ )
{
// 画面を初期化
ClearDrawScreen() ;
// マスクのデータを一部変更
for( j = 0 ; j < 16 ; j ++ )
MaskData[ i ][ j ] = 0 ;
// マスクにデータをセット
SetDataToMask( 16 , 16 , MaskData , MaskHandle ) ;
// マスク画面をセットしたマスクデータで埋めます
DrawFillMask( 0 , 0 , 640 , 480 , MaskHandle ) ;
// 白の四角を画面全体に描画します
DrawBox( 0 , 0 , 640 , 480 , GetColor( 255 , 255 , 255 ) , TRUE ) ;
// 裏画面の内容を表画面に反映させます
ScreenFlip() ;
// 時間待ち
WaitTimer( 100 ) ;
}
// マスクを削除します
DeleteMask( MaskHandle ) ;
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル 特になし | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル MakeMask 関数のサンプルを参照して下さい | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル マスクのデータを直接マスク画面の左上に転送し、そのつど 画面全体に白い四角を描画し、マスクの状態を確認します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
unsigned char MaskData[ 16 ][ 16 ] ;
int i , j ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画先を裏画面にします
SetDrawScreen( DX_SCREEN_BACK ) ;
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータを白で埋めます
for( i = 0 ; i < 16 ; i ++ )
for( j = 0 ; j < 16 ; j ++ )
MaskData[ i ][ j ] = 0xff ;
// ループ
for( i = 0 ; i < 16 ; i ++ )
{
// 画面を初期化
ClearDrawScreen() ;
// マスクのデータを一部変更
for( j = 0 ; j < 16 ; j ++ )
MaskData[ i ][ j ] = 0 ;
// マスクのデータを直接画面に転送
DrawMaskToDirectData( 0 , 0 , 16 , 16 , MaskData , DX_MASKTRANS_NONE ) ;
// 白の四角を画面全体に描画します
DrawBox( 0 , 0 , 640 , 480 , GetColor( 255 , 255 , 255 ) , TRUE ) ;
// 裏画面の内容を表画面に反映させます
ScreenFlip() ;
// 時間待ち
WaitTimer( 100 ) ;
}
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ダイレクトにマスク画面に動的に生成した 16 × 16 の大きさのマスク データを画面全体に描画し、その結果を確認するために描画毎に画面全体に 白い四角を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
unsigned char MaskData[ 16 ][ 16 ] ;
int i , j ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画先を裏画面にします
SetDrawScreen( DX_SCREEN_BACK ) ;
// マスク画面を作成します
CreateMaskScreen() ;
// マスクデータを白で埋めます
for( i = 0 ; i < 16 ; i ++ )
for( j = 0 ; j < 16 ; j ++ )
MaskData[ i ][ j ] = 0xff ;
// ループ
for( i = 0 ; i < 16 ; i ++ )
{
// 画面を初期化
ClearDrawScreen() ;
// マスクのデータを一部変更
for( j = 0 ; j < 16 ; j ++ )
MaskData[ i ][ j ] = 0 ;
// マスクのデータを直接画面全体に転送
DrawFillMaskToDirectData( 0 , 0 , 640 , 480 , 16 , 16 , MaskData ) ;
// 白の四角を画面全体に描画します
DrawBox( 0 , 0 , 640 , 480 , GetColor( 255 , 255 , 255 ) , TRUE ) ;
// 裏画面の内容を表画面に反映させます
ScreenFlip() ;
// 時間待ち
WaitTimer( 100 ) ;
}
// マスク画面を削除します
DeleteMaskScreen() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| 動画関係 | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル test.aviを等倍で再生する(ボタン押しキャンセルなし)
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
PlayMovie( "test.avi" , 1 , DX_MOVIEPLAYTYPE_NORMAL ) ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ??.mpg を画面いっぱいに拡大して再生します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MovieGraphHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// ムービーファイルをロードします。
MovieGraphHandle = LoadGraph( "??.mpg" ) ;
// ムービーを再生状態にします
PlayMovieToGraph( MovieGraphHandle ) ;
// ループ、GetMovieStateToGraph 関数はムービーの再生状態を得る関数です
// 戻り値が1の間は再生状態ですのでループを続けます
while( ProcessMessage() == 0 && GetMovieStateToGraph( MovieGraphHandle ) == 1 )
{
// ムービー映像を画面いっぱいに描画します
DrawExtendGraph( 0 , 0 , 640 , 480 , MovieGraphHandle , FALSE ) ;
// ウエイトをかけます、あまり速く描画すると画面がちらつくからです
WaitTimer( 17 ) ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ありません | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ??.avi ファイルを5秒目から再生します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MovieGraphHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// ムービーファイルをロードします。
MovieGraphHandle = LoadGraph( "??.avi" ) ;
// ムービーの再生位置を5秒目に変更します
SeekMovieToGraph( MovieGraphHandle , 5000 ) ;
// ムービーを再生状態にします
PlayMovieToGraph( MovieGraphHandle ) ;
// ループ、GetMovieStateToGraph 関数はムービーの再生状態を得る関数です
// 戻り値が1の間は再生状態ですのでループを続けます
while( ProcessMessage() == 0 && GetMovieStateToGraph( MovieGraphHandle ) == 1 )
{
// ムービー映像を画面いっぱいに描画します
DrawExtendGraph( 0 , 0 , 640 , 480 , MovieGraphHandle , FALSE ) ;
// ウエイトをかけます、あまり速く描画すると画面がちらつくからです
WaitTimer( 17 ) ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル ??.mpg ファイルを再生しながら、画面左上に再生時間を表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MovieGraphHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// ムービーファイルをロードします。
MovieGraphHandle = LoadGraph( "??.mpg" ) ;
// ムービーを再生状態にします
PlayMovieToGraph( MovieGraphHandle ) ;
// 描画先の画面を裏画面に
SetDrawScreen( DX_SCREEN_BACK ) ;
// ループ、GetMovieStateToGraph 関数はムービーの再生状態を得る関数です
// 戻り値が1の間は再生状態ですのでループを続けます
while( ProcessMessage() == 0 && GetMovieStateToGraph( MovieGraphHandle ) == 1 )
{
// ムービー映像を画面いっぱいに描画します
DrawExtendGraph( 0 , 0 , 640 , 480 , MovieGraphHandle , FALSE ) ;
// 画面左上に再生時間を描画します
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Time:%d", TellMovieToGraph( MovieGraphHandle ) ) ;
// 裏画面の内容を表画面に反映します
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
サンプル PlayMovieToGraph 関数のサンプルを参照して下さい | ||||||||||||||||||||||||||||
|
戻る | ||||||||||||||||||||||||||||