トップページ > 記事閲覧
DrawRectExtendGraphの縮小描画について
名前:ひろかず 日時: 2020/10/30 11:43

DrawRectExtendGraphを使用して縮小描画を行っているのですが、指定範囲外の画像がコピーされる事があり、対処に困っております。 指定範囲外の画像がコピーされたり、されなかったりと条件がいまいちよく分かりません。 再現プログラムは以下の通りです。 #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; // 描画可能画像を作成する 画像サイズ1024x1024 handle = MakeScreen(1024, 1024, FALSE); // 作成した画像を描画対象にする SetDrawScreen(handle); // MakeScreenの画面に赤色で矩形塗りつぶしを行う 描画範囲(0,0)-(511,275) DrawBox(0, 0, 512, 276, GetColor(255, 0, 0), TRUE); // MakeScreenの画面に白色で矩形塗りつぶしを行う 描画範囲(0,276)-(511,511) DrawBox(0, 276, 512, 512, GetColor(255, 255, 255), TRUE); // 描画対象を表画面にする SetDrawScreen(DX_SCREEN_FRONT); // 縮小描画を行う 表画面(16,32)-(174,96)に対し、MakeScreenの画像(0,276) x幅218px y幅88pxを転送 DrawRectExtendGraph(16, 32, 174, 96, 0, 276, 218, 88, handle, FALSE); // MakeScreen で作成したグラフィックハンドルの削除 DeleteGraph(handle); // キー入力待ち WaitKey(); // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; DrawRectExtendGraphで白色の箇所をコピーしたつもりが、なぜか赤色部分までコピーされてしまいます。 また、上記プログラムのMakeScreen(1024, 1024, FALSE);をMakeScreen(512, 512, FALSE);に変更すると赤色部分はコピーされません。 他、DrawRectExtendGraphの表画面への転送先座標(16,32)を、(16,31)や(16,33)に変更すると赤色部分はコピーされません。 発生する条件が良く分からない為、対処に困っております。 何卒、よろしくお願い申し上げます。
メンテ

Page: 1 |

Re: DrawRectExtendGraphの縮小描画について ( No.1 )
名前:管理人 日時:2020/10/30 23:50

すみません、SrcX, SrcY, SrcWidth, SrcHeight で指定した範囲のみ綺麗に描画されることが 理想なのですが、縮小アルゴリズムの関係上、どうしても指定した範囲から数ドット外れた 部分も描画されることがあります( 縮小率が高ければ高い程外れる範囲も広くなります ) なので、DrawRectExtendGraph を使用する場合は描画する範囲の区切りと区切りの間には 数ドットの隙間を空けるようにしてください m(_ _;m
メンテ
Re: DrawRectExtendGraphの縮小描画について ( No.2 )
名前:ひろかず(解決) 日時:2020/10/31 07:49

ご返信頂き、誠に有り難うございます。 縮小計算による誤差だとはなんとなく予想はしていたのですが、そうでしたか。 了解いたしました。 画像に隙間を入れることで対応したいと思います。 有り難うございました。
メンテ

Page: 1 |

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

   クッキー保存