トップページ > 記事閲覧
指定座標の透明度の取得
名前:kit it guy 日時: 2015/06/24 19:07

MakeScreenで作成したグラフィックハンドルで、 座標を指定してその座標の透明度を調べるにはどうすればいいですか
メンテ

Page: 1 |

Re: 指定座標の透明度の取得 ( No.1 )
名前:管理人 日時:2015/06/25 01:27

MakeScreen で作成したグラフィックハンドルのピクセルの色を直接読み取る機能は無いので、 一度ソフトウエアイメージに転送して、ソフトウエアイメージの色を読み取る関数で色を取得する形になります 幅・高さ1ピクセルのソフトウエアイメージを使用して MakeScreen で作成したグラフィックハンドルの 1点の色を取得して画面に描画するサンプルを作成してみましたので、よろしければご覧ください #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int r, g, b, a ; int x, add ; int ScreenHandle ; int SoftImageHandle ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // アルファチャンネル付きの描画対象にできるグラフィックハンドルを作成 ScreenHandle = MakeScreen( 640, 480, TRUE ) ; // 1x1 サイズのアルファチャンネル付きソフトウエアイメージハンドルを作成 SoftImageHandle = MakeARGB8ColorSoftImage( 1, 1 ) ; // グラフィックハンドルの中心に円を描画 SetDrawScreen( ScreenHandle ) ; ClearDrawScreen() ; DrawCircle( 320, 240, 64, GetColor( 255,255,0 ), TRUE ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 色のチェック座標を移動する処理に使用する変数を初期化 x = 0 ; add = 8 ; // 結果が見やすいように背景色を灰色にする SetBackgroundColor( 128,128,128 ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面をクリア ClearDrawScreen() ; // MakeScreen で作成したグラフィックハンドルを描画 DrawGraph( 0, 0, ScreenHandle, TRUE ) ; // 色のチェック座標に四角形を描画 DrawBox( x - 3, 240 - 3, x + 3, 240 + 3, GetColor( 0,0,0 ), TRUE ) ; // 色のチェック座標を移動する処理( 画面内を左右に移動する ) x += add ; if( x < 0 || x > 640 ) { add = -add ; } // 描画先を MakeScreen で作成したグラフィックハンドルに変更 SetDrawScreen( ScreenHandle ) ; // 色のチェック座標の1ピクセルをソフトウエアイメージハンドルに転送 GetDrawScreenSoftImage( x, 240, x + 1, 240 + 1, SoftImageHandle ) ; // 転送した1ピクセルの色( 赤, 緑, 青, アルファ( 透明度 ) の値 )を取得 GetPixelSoftImage( SoftImageHandle, 0, 0, &r, &g, &b, &a ) ; // 描画先を裏画面に戻す SetDrawScreen( DX_SCREEN_BACK ) ; // 色の値を描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "R:%-3d G:%-3d B:%-3d A:%-3d", r, g, b, a ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 因みに MakeScreen で作成したグラフィックハンドルの内容を GetDrawScreenSoftImage を使用して ソフトウエアイメージハンドルに転送する処理は負荷が高いので、もし1ピクセルではなく もっと広い範囲の沢山のピクセルの色を取得されたい場合は MakeARGB8ColorSoftImage で作成する ソフトウエアイメージを大きくして一度の GetDrawScreenSoftImage で必要な部分を転送するようにしてください
メンテ
Re: 指定座標の透明度の取得 ( No.2 )
名前:kit it guy 日時:2015/06/25 21:15

早速のお応えありがとうございました。 うまく動きました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存