やってみました。
LoadImage に LR_CREATEDIBSECTION を指定して読み込むとなぜか8bitColorになってしまったので、GetDIBits を使っています。
//- 以下、テストコード ("test1.bmp"を使用) -//
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
if ( DxLib_Init( ) == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
int StrColor = GetColor( 255, 255, 255 );
// 元となるビットマップハンドルの作成
HBITMAP hBmp;
hBmp = (HBITMAP)LoadImage( NULL, "..\\!Sample\\" "test1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
// DIBセクションの取得
BITMAP DDBInfo;
BITMAPINFO DIBInfo;
GetObject( hBmp, sizeof(BITMAP), &DDBInfo );
DIBInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
DIBInfo.bmiHeader.biWidth = DDBInfo.bmWidth;
DIBInfo.bmiHeader.biHeight = DDBInfo.bmHeight;
DIBInfo.bmiHeader.biPlanes = 1;
DIBInfo.bmiHeader.biBitCount = 32;
DIBInfo.bmiHeader.biCompression = BI_RGB;
BYTE *pData = new BYTE[DDBInfo.bmWidth * DDBInfo.bmHeight * 4];
HDC hDC = GetDC( GetMainWindowHandle( ) );
GetDIBits( hDC, hBmp, 0, DDBInfo.bmHeight, (void*)pData, &DIBInfo, DIB_RGB_COLORS);
ReleaseDC( GetMainWindowHandle( ), hDC );
DeleteObject( hBmp );
// ソフトイメージに変換してみる
int sh = MakeXRGB8ColorSoftImage( DDBInfo.bmWidth, DDBInfo.bmHeight );
BYTE *Dots = pData;
for ( int y = DDBInfo.bmHeight - 1; y >= 0 ; y-- ) { // データは上下さかさまらしい
for ( int x = 0; x < DDBInfo.bmWidth; x++ ) {
DrawPixelSoftImage( sh, x, y, *(Dots+2), *(Dots+1), *(Dots+0), *(Dots+3) );
Dots += 4;
}
}
// ハンドルに変換してみる
int gh = CreateGraphFromBmp( &DIBInfo, pData ); // やってみたらうまくいきました。
delete pData; // ReCreateGraphするときに必要かも。
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
ClearDrawScreen( );
DrawFormatString( 0, 0, StrColor, "TEST" );
DrawSoftImage( 0, 0, sh );
DrawGraph( 200, 0, gh, TRUE );
ScreenFlip( );
}
DxLib_End( );
return 0;
}