トップページ > 記事閲覧
CreateMaskFromMemについて
名前:Tir 日時: 2015/04/03 17:57

CreateMaskFromMemを使ってファイルを読み込むとmemory dumpが発生するみたいです。 バージョンはVer3.13eです
メンテ

Page: 1 |

Re: CreateMaskFromMemについて ( No.1 )
名前:管理人 日時:2015/04/04 21:43

手元の環境で以下のようなシンプルな CreateMaskFromMem 関数を使った プログラムを実行してみた限りでは memory dump は発生しませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int MaskHandle ; int i ; void *FileImage ; int FileHandle ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) { return -1 ; } // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // マスク画面を作成します CreateMaskScreen() ; // マスク用の画像ファイルの読み込み FileImageSize = ( int )FileRead_size( "testMask.bmp" ) ; FileImage = malloc( FileImageSize ) ; FileHandle = FileRead_open( "testMask.bmp" ) ; FileRead_read( FileImage, FileImageSize, FileHandle ) ; FileRead_close( FileHandle ) ; // マスクハンドルの作成 MaskHandle = CreateMaskFromMem( FileImage, FileImageSize ) ; // マスクを画面のランダムな位置に10個描画 for( i = 0 ; i < 10 ; i ++ ) { DrawMask( GetRand( 639 ) , GetRand( 479 ) , MaskHandle , DX_MASKTRANS_NONE ) ; } // 画面全体に青い四角を描画 DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 0 , 255 ) , TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; // キーの入力待ち WaitKey() ; // マスク画面を削除 DeleteMaskScreen() ; // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければ上記のプログラムが Tirさんの環境でも正常に動作するか お試しいただけないでしょうか? ( testMask.bmp はDXライブラリのパッケージの 「サンプルプログラム実行用フォルダ」に入っています )
メンテ
Re: CreateMaskFromMemについて ( No.2 )
名前:Tir 日時:2015/04/05 00:49

少々長くなりそうなのでメールにて送らせて頂きました
メンテ
Re: CreateMaskFromMemについて ( No.3 )
名前:管理人 日時:2015/04/05 15:55

メールを拝見しました 送っていただいたメールの長さくらいでしたらこちらの掲示板に直接書き込んでいただいても大丈夫です > 中身の違いはCreateGraphFromMemかCreateMaskFromMemのみです。 > ですので今回CreateMaskFromMemに問題があるのではと思い連絡させて頂いた次第です。 ブレイクポイントなどを使用して CreateMaskFromMem の箇所でプログラムを停止してから、 ステップ実行で CreateMaskFromMem のみを実行して memory dump が発生するかを確認するまでは CreateMaskFromMem が原因と断定することはできないと思います 私の手元で現象が再現できれば原因が分かると思いますので、もし不都合がなければ 本件の現象が発生するプログラムと、プログラムの実行に必要な画像ファイル等をメールで 送っていただけないでしょうか?
メンテ
Re: CreateMaskFromMemについて ( No.4 )
名前:Tir 日時:2015/04/14 01:08

メールをお送りしたのですがお気づきでしょうか…? それと新たに気になった現象が発生したので報告します。 CreateMaskScreenを呼び出した時にエラーが発生します。 現象が発生したのはSetGraphModeで640×480より大きく設定して、 MakeScreenで640×480のスクリーンを作りそこをSetDrawScreenで描画対象にした後 CreateMaskScreenを呼び出した時です。
メンテ
Re: CreateMaskFromMemについて ( No.5 )
名前:管理人 日時:2015/04/17 00:29

すみません、メールには気づいていたのですが、添付ファイルに気づいていませんでした 且つメールの文章を拝読して「画像の形式が問題で、形式を変更したら問題が解決した、ということなのかな・・・?」と 早合点してしまっていました orz メールでご指摘いただいた件と、No.4 のお書き込みでご指摘いただいた手順で CreateMakeScreen を 使用するとエラーが発生するバグを修正しましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 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をお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: CreateMaskFromMemについて ( No.6 )
名前:Tir 日時:2015/04/17 01:04

対応有難うございます。 ですが最新版を試したところMakeScreenで文字を画像に起こした素材が壊滅状態になってしまいました…。
メンテ
Re: CreateMaskFromMemについて ( No.7 )
名前:管理人 日時:2015/04/17 01:50

以下のようなプログラムを組んで MakeScreen に文字を書き込むテストを行ってみましたが、 特に問題なく MakeScreen に書き込んだ文字を画面に表示することができました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ScreenGraph ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // MakeScreen で描画対象にできる画像を作成 ScreenGraph = MakeScreen( 640, 480, FALSE ) ; // MakeScreen で作成した画像を描画対象にする SetDrawScreen( ScreenGraph ) ; // 画像全体を灰色に塗りつぶす DrawBox( 0, 0, 640, 480, GetColor( 128,128,128 ), TRUE ) ; // 画像の左上端に文字列を描画 DrawString( 0, 0, "ABCDEFG", GetColor( 255,255,255 ) ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 画面中央に MakeScreen で作成した画像を描画 DrawGraph( 320, 240, ScreenGraph, FALSE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければ「MakeScreenで文字を画像に起こした素材が壊滅状態」について どのようなことが発生してしまっているのか教えていただけないでしょうか?
メンテ
Re: CreateMaskFromMemについて ( No.8 )
名前:Tir 日時:2015/04/17 03:12

殆どの文字が描画されなくなってしまいます 上記のプログラムのDrawStringをDrawStringToHandleに変えたところ描画されなくなりました。 試しに制作したフォントは CreateFontToHandle("MS Gothic" , 16 ,3 , DX_FONTTYPE_ANTIALIASING_4X4)です
メンテ
Re: CreateMaskFromMemについて ( No.9 )
名前:Tir 日時:2015/04/17 23:19

補足ですがGetDrawFormatStringWidthToHandleの 戻り値も変わってしまいました
メンテ
Re: CreateMaskFromMemについて ( No.10 )
名前:管理人 日時:2015/04/18 09:22

殆どの文字が描画されない、ですか・・・ 私の手元でも上記のプログラムを CreateFontToHandle("MS Gothic" , 16 ,3 , DX_FONTTYPE_ANTIALIASING_4X4) で作成した フォントハンドルを使用するようにしましたが、問題なく文字列が描画されました 以下のようなプログラムなのですが、Tirさんの環境で試されたプログラムも同じようなものでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ScreenGraph ; int FontHandle ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // MakeScreen で描画対象にできる画像を作成 ScreenGraph = MakeScreen( 640, 480, FALSE ) ; // MakeScreen で作成した画像を描画対象にする SetDrawScreen( ScreenGraph ) ; // フォントハンドルを作成 FontHandle = CreateFontToHandle( "MS Gothic" , 16 ,3 , DX_FONTTYPE_ANTIALIASING_4X4 ) ; // 画像全体を灰色に塗りつぶす DrawBox( 0, 0, 640, 480, GetColor( 128,128,128 ), TRUE ) ; // 画像の左上端に文字列を描画 DrawStringToHandle( 0, 0, "ABCDEFG", GetColor( 255,255,255 ), FontHandle ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 画面中央に MakeScreen で作成した画像を描画 DrawGraph( 320, 240, ScreenGraph, FALSE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } あと、上記プログラムを私の環境でビルドしたファイルをこちらにアップしましたので、 よろしければこちらの実行ファイルでも正常に動作しないかお試しいただけないでしょうか? m(_ _)m https://dxlib.xsrv.jp/temp/CreateFontTest.zip
メンテ
Re: CreateMaskFromMemについて ( No.11 )
名前:Tir 日時:2015/04/18 19:38

申し訳ございません、上記のプログラムをDrawStringToHandleに変更して描画されないのは私のミスでした。 実際にどういう風に描画されるのか画像をメールで送らせて頂きました。
メンテ
Re: CreateMaskFromMemについて ( No.12 )
名前:管理人 日時:2015/04/19 00:07

メールを拝見しました ご指摘の通り GetDrawFormatStringWidthToHandle が正常な値を返さないバグがありました ( 尚、正常に動作しないのは Unicode 版のみで、マルチバイト版は問題ありませんでした ) 修正したバージョンをアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 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をお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: CreateMaskFromMemについて ( No.13 )
名前:Tir(解決) 日時:2015/04/19 00:26

無事描画されるようになりました。有難うございます
メンテ

Page: 1 |

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

   クッキー保存