トップページ > 過去ログ > 記事閲覧
文字のグラデーション
名前:健太 日時: 2009/09/06 02:38

はじめまして。 いつもDXライブラリにはお世話になってます。 DXライブラリの文字列描画関数はこの上ないほど簡略 でとても使いやすくて重宝してます。 作者様にお願いがあります・・・。 その昔僕がVBをやっていた時にテキストのグラデーション表示(縦、横、ナナメ)関数を作ったのですが、それをDirectX VC++で作ろうとしたら挫折してしまいました。 なんとか、これと類似した関数をDXライブラリ側で 実装していただけませんでしょうか? または、有効な方法を教えてもらえないでしょうか? 無理な要求でしたら、すみません。

Page: 1 |

Re: 文字のグラデーション ( No.1 )
名前:健太 日時:2009/09/09 00:22

無理言って申し訳ありませんでした。 なんとかGDI+を使ってそれらしく動作させることができたので、なんとかなりそうです。
Re: 文字のグラデーション ( No.2 )
名前:管理人 日時:2009/09/09 00:54

ちょっと遅かったですか・・・ 一応手段は用意してみました。 こちらの最新版で http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTestDX9.zip http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTestDX9.zip (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 文字の色をグラデーションさせるのはこんな感じのプログラムになります。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FontHandle, ImageHandle, EdgeImageHandle, DrawWidth ; int SoftImage, EdgeSoftImage ; VERTEX Vertex[ 6 ] ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 縁つきアンチエイリアスフォントの作成 FontHandle = CreateFontToHandle( NULL, 24, -1, DX_FONTTYPE_ANTIALIASING_EDGE ) ; // 文字列イメージを転送する ARGB8形式の画面サイズのメモリイメージを作成( 縁用と二つ ) SoftImage = MakeARGB8ColorSoftImage( 640, 480 ) ; EdgeSoftImage = MakeARGB8ColorSoftImage( 640, 480 ) ; // 作成したメモリイメージを0で塗りつぶす FillSoftImage( SoftImage, 0, 0, 0, 0 ) ; FillSoftImage( EdgeSoftImage, 0, 0, 0, 0 ) ; // 文字列イメージをメモリイメージに書き込む BltStringSoftImageToHandle( 0, 0, "グラデーションテスト", SoftImage, EdgeSoftImage, FontHandle, FALSE ) ; // 描画幅を取得する DrawWidth = GetDrawStringWidthToHandle( "グラデーションテスト", lstrlen( "グラデーションテスト" ), FontHandle ) ; // 描画幅と描画高さのグラフィックハンドルを作成する ImageHandle = CreateGraphFromRectSoftImage( SoftImage, 0, 0, DrawWidth, 26 ) ; EdgeImageHandle = CreateGraphFromRectSoftImage( EdgeSoftImage, 0, 0, DrawWidth, 26 ) ; // 縁の部分は緑色で描画 SetDrawBright( 0, 255, 0 ) ; DrawGraph( 0, 0, EdgeImageHandle, TRUE ) ; SetDrawBright( 255, 255, 255 ) ; // 本体部分は DrawPolygon を使用して上下に赤から青にグラデーションさせながら描画 Vertex[ 0 ].x = 0.0f - 0.5f ; Vertex[ 0 ].y = 0.0f - 0.5f ; Vertex[ 1 ].x = DrawWidth - 0.5f ; Vertex[ 1 ].y = 0.0f - 0.5f ; Vertex[ 2 ].x = 0.0f - 0.5f ; Vertex[ 2 ].y = 26.0f - 0.5f ; Vertex[ 3 ].x = DrawWidth - 0.5f ; Vertex[ 3 ].y = 26.0f - 0.5f ; Vertex[ 0 ].u = 0.0f ; Vertex[ 0 ].v = 0.0f ; Vertex[ 1 ].u = 1.0f ; Vertex[ 1 ].v = 0.0f ; Vertex[ 2 ].u = 0.0f ; Vertex[ 2 ].v = 1.0f ; Vertex[ 3 ].u = 1.0f ; Vertex[ 3 ].v = 1.0f ; Vertex[ 0 ].b = 0 ; Vertex[ 0 ].g = 0 ; Vertex[ 0 ].r = 255 ; Vertex[ 0 ].a = 255 ; Vertex[ 1 ].b = 0 ; Vertex[ 1 ].g = 0 ; Vertex[ 1 ].r = 255 ; Vertex[ 1 ].a = 255 ; Vertex[ 2 ].b = 255 ; Vertex[ 2 ].g = 0 ; Vertex[ 2 ].r = 0 ; Vertex[ 2 ].a = 255 ; Vertex[ 3 ].b = 255 ; Vertex[ 3 ].g = 0 ; Vertex[ 3 ].r = 0 ; Vertex[ 3 ].a = 255 ; Vertex[ 4 ] = Vertex[ 2 ] ; Vertex[ 5 ] = Vertex[ 1 ] ; DrawPolygon( Vertex, 2, ImageHandle, TRUE, TRUE ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } SoftImage に文字列イメージを転送して、それをグラフィックハンドル化したあと DrawPolygon でポリゴンとして描画、その際に各頂点の色の値を4隅で変える事で グラデーションを・・・といった感じです。 もしこちらをお試しになってみて、且つ不明な点がございましたらお訊ね下さい。
Re: 文字のグラデーシ ( No.3 )
名前:健太 日時:2009/09/09 23:08

対応ありがとうございます! gdi+はWindowsXP以外はDLLが必要になったりして面倒なので管理人様の提供してくださったコードをよろこんで使わせてもらいます。
Re: 文字のグラデーション ( No.4 )
名前:健太 日時:2009/09/11 02:27

こんにちは! 管理人様が提供してくださったコードをビルドしようとすると、以下のようなエラーが出てしまい困ってしまいました… .\main.cpp(30) : error C3861: 'BltStringSoftImageToHandle': 識別子が見つかりませんでした .\main.cpp(36) : error C2664: 'lstrlenW' : 1 番目の引数を 'const char [21]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 .\main.cpp(39) : error C3861: 'CreateGraphFromRectSoftImage': 識別子が見つかりませんでした .\main.cpp(40) : error C3861: 'CreateGraphFromRectSoftImage': 識別子が見つかりませんでした .\main.cpp(66) : error C2660: 'DxLib::DrawPolygon' : 関数に 5 個の引数を指定できません。 リンクされたライブラリを上書きして、コードをコピーアンドペーストしてリビルドを行いました。 開発環境はWindows Vista & Visual Studio 2008 Express Editionです。 ライブラリのヘッダーやcppソースものぞいてみましたが、やはり上記の関数は見つかりませんでした・・・。
Re: 文字のグラデーション ( No.5 )
名前:管理人 日時:2009/09/12 17:25

申し訳ありません、URLを間違えていました orz 正しいURLはこちらになります http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.zip http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.zip (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: 文字のグラデーション ( No.6 )
名前:健太 日時:2009/09/13 00:50

うーん、ダメですね… もしかすると、古いDXライブラリにそんな関数があったような気がしないでもない・・・。 似たような関数は見つかるので、なんとかできそうな気もします。どうすればいいかはわかっているのでもう少し頑張ってみます。
Re: 文字のグラデーション ( No.7 )
名前:管理人 日時:2009/09/13 01:11

再び貼り付けたURLも間違っていました・・・ 正しくはこちらになります 今度こそ間違いありません http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 本当に本当に申し訳ありません・・・
Re: 文字のグラデーション ( No.8 )
名前:健太 日時:2009/09/13 02:24

やっとできました! お忙しい中対応していただき、本当に本当にありがとうございます!

Page: 1 |