管理人様
素早いご対応ありがとうございます。
修正版で確認をしたところ、確かにエラーは出現しなくなったのですが、
マスクが一定のサイズで切れて表示されてしまいます。
お忙しい中大変申し訳ありませんが、ご対応願えませんでしょうか。
以下状況です。
1024*768の画面を縦横それぞれ1.28で割ると800*600になります。
800*600の画面に縮小することで、確かにマスクは縮小されるのですが、
マスクの表示範囲はそれを更に1.28で割った625*468になってしまいます。
サンプルとして使用したマスク画像(1024*768)です。
https://dl.dropboxusercontent.com/u/1926851/mask.png
これを800*600に縮小した結果です。625*468の範囲内しかマスクが適用されていません。
https://dl.dropboxusercontent.com/u/1926851/sample.png
再現時のコードです。
https://dl.dropboxusercontent.com/u/1926851/Main.cpp
以下Main.cppの内容です。
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// ウィンドウモードで起動
ChangeWindowMode(true);
//画面サイズ
SetGraphMode(800, 600, 16);
//DXLib初期化
if(DxLib_Init() == -1){
return -1;
}
//ここに描かれたものを最終的に縮小表示する
int screen = MakeScreen(1024, 768);
SetDrawScreen(screen);
SetDrawMode(DX_DRAWMODE_BILINEAR);
//マスク画像をロード
int mask_handle = LoadMask("mask.png");
CreateMaskScreen();
DrawMask(0, 0, mask_handle, DX_MASKTRANS_BLACK);
//screen画面上にマスクを描き、その上から画面を黄色で塗りつぶす
DrawBox(0, 0, 1024, 768, GetColor(255, 255, 0), TRUE);
//マスク画面を解放
DeleteMaskScreen();
DeleteMask(mask_handle);
//描画先を裏画面へ
SetDrawScreen(DX_SCREEN_BACK);
//screen画面に描画した マスク+黄色の塗りつぶし を縮小して裏画面にコピー
DrawExtendGraph(0, 0, 800, 600, screen, FALSE);
//表示
ScreenFlip();
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}