いつもお世話になっております。
数年前から作っているプログラムのDXライブラリを久しぶりに最新に入れ替えたところ、
特定のBMP画像の表示がおかしくなるという現象が発生しました。
ぱっと見た感じ、1ピクセルごとに横にずれて表示されているようです。
「赤青黄」という画像なら「赤白青白黄白」というように。
問題のBMP画像をPNG画像に変換したところ、正常に表示されました。
それをさらにBMPに再変換した場合、前述の異常表示になりました。
また、同じサイズの別のBMP画像を用意してみましたが、こちらは正常に表示されました。
特定のBMP画像だけが横に伸びるようになってしまっています。
手持ちのDXライブラリの旧バージョンを試してみたところ
3.11Bでは正常に表示されました。
(3.15とか3.17あたりは、ウィルスソフトが反応してそもそもコンパイルできませんでした)
3.21fでは異常になりました。
実行環境は
Windows8.1
Geforce GTX 1080
モニタを二台(通常のモニタと液晶タブレット)で使っています。
モニタの解像度は1920×1080です。
サンプルを以下に示します。
//ここからサンプル--------------------------------------------------------------------
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GHandle ;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
//問題のBMP画像
GHandle = LoadGraph( "test1.bmp" ) ;
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
DeleteGraph( GHandle ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
//問題の画像をPNGに変換したもの
GHandle = LoadGraph( "test1.png" ) ;
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
DeleteGraph( GHandle ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
//全く別のBMP画像
GHandle = LoadGraph( "test2.bmp" ) ;
DrawGraph( 0 , 0 , GHandle , TRUE ) ;
DeleteGraph( GHandle ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
//ここまでサンプル--------------------------------------------------------------------
サンプルに利用する画像ファイルは以下のアップローダーに用意しました。
https://21.gigafile.nu/0814-d34f1eea0365b2a7156411e323afc120b
ダウンロードパスワード DXte
現象が再現できなかった時のために、簡単ですが説明用画像も含めてあります。
ご確認いただけると幸いです。