MakeGraphで作った画像に透過色を指定したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
namari
記事: 111
登録日時: 11年前

MakeGraphで作った画像に透過色を指定したい

#1

投稿記事 by namari » 8年前

DXlibでは文字を傾けることができないために、
文字を書いたものを画像で保存して、その画像を傾けるという処理をとっています。
ここで、画像化した文字に背景色が入ってしまい非常に扱いにくいです。

コード:

void load_of_moziretu(char mozi[],int* c_handle,int color_num,int font_num){
	SetTransColor( 0 , 0 , 0 ) ;

	*c_handle = MakeGraph( 300 , 30 ) ;
	
	DrawFormatStringToHandle(0,0,color[color_num],font[font_num],mozi);
	GetDrawScreenGraph( 0 , 0 , 300 , 30 , *c_handle ) ;
	ClearDrawScreen();
}

load_of_moziretu("hogehoge",handle,1,1);
MakeGraphで作って、DrawFormatStringToHandleで読み込んだ画像で
背景色を透過する方法(透過色を指定する方法)はないのでしょうか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: MakeGraphで作った画像に透過色を指定したい

#2

投稿記事 by ISLe » 8年前

前提として、MakeScreenは使わないで、ということでしょうか。

アバター
namari
記事: 111
登録日時: 11年前

Re: MakeGraphで作った画像に透過色を指定したい

#3

投稿記事 by namari » 8年前

>>ISLeさん
返信遅れましてすいません
MakeScreenでもかまいません

透過色を指定するというか、フォント部分のみの画像が作れればいいのですが……

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: MakeGraphで作った画像に透過色を指定したい

#4

投稿記事 by tk-xleader » 8年前

リファレンスには載っていませんが、DxLib.hで宣言されている次の関数が使えるかもしれないですよ。

コード:

extern	int			DrawRotaFormatStringToHandle(			int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *FormatString = NULL , ... ) ;		// フォントハンドルを使用して書式指定文字列を回転描画する

アバター
namari
記事: 111
登録日時: 11年前

Re: MakeGraphで作った画像に透過色を指定したい

#5

投稿記事 by namari » 8年前

>>tk-xleaderさん
内容的には完璧なんですが、今のDXlibにはないのか識別子が見つかりませんね・・・

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: MakeGraphで作った画像に透過色を指定したい

#6

投稿記事 by みけCAT » 8年前

namari さんが書きました:内容的には完璧なんですが、今のDXlibにはないのか識別子が見つかりませんね・・・
更新はできないのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: MakeGraphで作った画像に透過色を指定したい

#7

投稿記事 by tk-xleader » 8年前

namari さんが書きました: 内容的には完璧なんですが、今のDXlibにはないのか識別子が見つかりませんね・・・
 DxLib.libをobjdump -t で調べたときのシンボル情報の中には存在するのですが、ビルドするとリンカエラーとかが生じるのでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: MakeGraphで作った画像に透過色を指定したい

#8

投稿記事 by みけCAT » 8年前

tk-xleader さんが書きました:リファレンスには載っていませんが、DxLib.hで宣言されている次の関数が使えるかもしれないですよ。

コード:

extern	int			DrawRotaFormatStringToHandle(			int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *FormatString = NULL , ... ) ;		// フォントハンドルを使用して書式指定文字列を回転描画する
GCC 4.8.1、DXライブラリ 3.16で試してみましたが、なかなか直感的でない挙動をするようですね…

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	if (ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() != 0) return -1;
	SetDrawScreen(DX_SCREEN_BACK);
	int font = CreateFontToHandle(NULL, -1, -1, -1);
	int x = 100, y = 100, rcx = 100, rcy = 100, a = 0;

	char key[256];
	while (ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0) {
		if (key[KEY_INPUT_A]) x--;
		if (key[KEY_INPUT_D]) x++;
		if (key[KEY_INPUT_W]) y--;
		if (key[KEY_INPUT_S]) y++;
		if (key[KEY_INPUT_G]) rcx--;
		if (key[KEY_INPUT_J]) rcx++;
		if (key[KEY_INPUT_Y]) rcy--;
		if (key[KEY_INPUT_H]) rcy++;
		if (key[KEY_INPUT_O]) a--;
		if (key[KEY_INPUT_P]) a++;

		DrawString(10, 10, "A:x-- D:x++ W:y-- S:y++", GetColor(128, 128, 128));
		DrawString(10, 40, "G:rcx-- J:rcx++ Y:rcy-- H:rcy++", GetColor(128, 128, 128));
		DrawString(10, 70, "O:a-- P:a++", GetColor(128, 128, 128));
		DrawFormatString(10, 100, GetColor(128, 128, 128), "x = %d, y = %d, rcx = %d, rcy = %d, a = %d",
			x, y, rcx, rcy, a);
		DrawLine(x - 5, y - 5, x + 5, y + 5, GetColor(128, 128, 128));
		DrawLine(x - 5, y + 5, x + 5, y - 5, GetColor(128, 128, 128));
		DrawString(x + 10, y, "(x, y)", GetColor(128, 128, 128));
		DrawLine(rcx - 5, rcy - 5, rcx + 5, rcy + 5, GetColor(128, 128, 128));
		DrawLine(rcx - 5, rcy + 5, rcx + 5, rcy - 5, GetColor(128, 128, 128));
		DrawString(rcx + 10, rcy, "(rcx, rcy)", GetColor(128, 128, 128));
		DrawRotaFormatStringToHandle(x, y, 1.0, 1.0, rcx, rcy,
			a * 3.1451926535897932384626433 / 180.0, GetColor(255, 255, 255),
			font, 0, FALSE, "test string");
		ScreenFlip();
	}

	DxLib_End();
	return 0;
}
drfsth-test-20160220.png
スクリーンショット
drfsth-test-20160220.png (23.54 KiB) 閲覧数: 4843 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
namari
記事: 111
登録日時: 11年前

Re: MakeGraphで作った画像に透過色を指定したい

#9

投稿記事 by namari » 8年前

>みけCATさん
>更新はできないのですか?

3.12b→3.16bで使えるようになりました!
便利ですね!
ただ、この関数、引数の取り方の理解に苦労してしまい、遅れました!
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る