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
|
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
|
Re: CreateMaskFromMemについて ( No.13 ) |
- 名前:Tir(解決) 日時:2015/04/19 00:26
無事描画されるようになりました。有難うございます
|