トップページ > 記事閲覧
バグ(?)
名前:ゆゆ 日時: 2016/12/23 20:34

お世話になっております。 以下のようなプログラムでバグ(?)が起きました。 int MAKESCREENHANDLE = MakeScreen(256,256); int GRAPH1 = LoadGraph("A.png"); int GRAPH2 = LoadGraph("B.png"); ...(省略)...メインループ SetDrawScreen(MAKESCREENHANDLE); ClearDrawScreen(); SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); DrawExtendGraph(0, 0, 256, 256, GRAPH1, TRUE); SetDrawBlendMode(DX_BLENDMODE_ALPHA, 180); DrawExtendGraph(0, 0, 256, 256, GRAPH2, TRUE); SetDrawScreen(DX_SCREEN_BACK); SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); DrawExtendGraph(0, 0, 256, 256, MAKESCREENHANDLE, TRUE); ... これは単に二つの画像を組み合わせて1つの画像にするだけなのですが、(なのでほかのやり方もあると思いますが、) これを実行すると、GRAPH1がGRAPH2のブレンドと一緒になってしまうというバグ(?)が起きます。 つまり、GRAPH1もGRAPH2と同じように SetDrawBlendMode(DX_BLENDMODE_ALPHA, 180); のブレンドになってしまう、ということです。 しかし、 ...(省略)...メインループ SetDrawScreen(MAKESCREENHANDLE); ClearDrawScreen(); SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); DrawExtendGraph(0, 0, 256, 256, GRAPH1, TRUE); SetDrawBlendMode(DX_BLENDMODE_ADD, 180); DrawExtendGraph(0, 0, 256, 256, GRAPH2, TRUE); SetDrawScreen(DX_SCREEN_BACK); SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); DrawExtendGraph(0, 0, 256, 256, MAKESCREENHANDLE, TRUE); ... GRAPH2のブレンドをDX_BLENDMODE_ADDに変更したところ、GRAPH1はちゃんと SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255); のブレンドで表示されました。 わかりにくいかもしれませんが、確認してくださると助かります。 もう一つ、バグ(?)を発見しました。 DrawFormatStringFToHandleなのですが、上下が少し途切れるという現象が発生しています。 DrawFormatStringToHandleでは問題なく表示されます。 int FONT = CreateFontToHandle("Meiryo UI", 20, 5, DX_FONTTYPE_ANTIALIASING, -1, -1, TRUE); この設定で(仮) DrawFormatStringFToHandleで、座標をいろいろなところに移動させながら(小数有り)、"000"を表示してみると、 0の上がほんの少し途切れたり、0の下がほんの少し途切れたりします。そんなに気になりはしないのですが、 バグ(?)なのかもしれないと思い、報告いたしました。 お手数をおかけしますが、よろしくお願いいたします。
メンテ

Page: 1 |

Re: バグ(?) ( No.1 )
名前:管理人 日時:2016/12/24 00:55

> 以下のようなプログラムでバグ(?)が起きました。 実際に使用された画像を拝見しないとはっきりとはわかりませんが、 MakeScreen で作成できる『描画対象にできる画像ハンドル』に対して半透明の描画を行った場合、 『乗算済みアルファ』を使用しないと正しい描画結果が得られませんので、恐らくご報告の問題も 『乗算済みアルファ』を使用することで解決すると思います DXライブラリで『乗算済みアルファ』を使用する方法についてはこちらに解説がありますので、 よろしければご覧ください m(_ _)m <乗算済みアルファのすすめ> https://dxlib.xsrv.jp/lecture/PremulAlpha/PremulAlpha.html > DrawFormatStringFToHandleなのですが、上下が少し途切れるという現象が発生しています。 ご指摘ありがとうございます、手元の環境でも端が途切れる現象を確認しました 小数点以下の値がある座標になり描画元と描画先のドットがぴったり一致しなくなる( ドットバイドットではなくなる )ので、 上下左右端を通常よりも1ドット広い範囲描画しなければならないのですが、それをしていませんでした 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい)
メンテ
Re: バグ(?) ( No.2 )
名前:ゆゆ (解決) 日時:2016/12/24 11:27

1.乗算済アルファでしたか...、この間も教えてくださったのに申し訳ございません。 関係ないと思っていました...。 2.バグの修正ありがとうございます。 今回も丁寧なご回答ありがとうございました!
メンテ

Page: 1 |

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

   クッキー保存