|
|
2011/10/10(Mon) 00:00:47|NO.42169
環境によりは少し異なるようですが
当方では Windows 7 home 64bit を使用しております。
それ以外の環境も必要でしたら明記いたします。
font命令で大きめの文字サイズ(当方では23以上)を指定した場合に、
font命令の第2パラメータ(フォントスタイル)に16を指定しなくても、
mes命令で表示される文字列に強制的にアンチエイリアスがかかってしまいます。
これを解決する方法はないでしょうか?
もしmes命令では不可能でも、
他の命令などでこれが実現できる方法があればそれを教えて頂ければ幸いです。
以下参考スクリプトです。
boxf , , 640, 240
font msgothic, 72
color 255,255,255
mes "HSP あいうえお 塵"
gmode 2 , ginfo_mesx , ginfo_mesy
pos ,240
gcopy
;-----
pos 200,150
sysfont
color 255,255,255
mes "gmode2 で0,0,0を透過してコピー\n ↓ ↓ ↓ ↓ ↓"
pos 50,360
color
mes "255,255,255で描画した文字列をコピーしているのに、ゴミが残っている。\nこれを指定した1色のみでクッキリ描画したい。"
私が使おうとしている用途の都合上、透過してコピーする必要があるため
「最初から"最終的に描画したい背景色"の上に描画すれば、ゴミは出ないよ。」
というのは無しでお願いします。
|
|
2011/10/10(Mon) 00:12:08|NO.42172
冒頭3行あたりの文章が日本語としてかなりおかしなことになっていますが、
どういう文章を書こうと何度も試行錯誤して書き直している内に
誤字や文節のおかしさに気づかずそのまま投稿してしまいました。
意味は通じると思いますが一応訂正しておきます。
訂正前
---------------------------------------------
環境によりは少し異なるようですが
当方では Windows 7 home 64bit を使用しております。
それ以外の環境も必要でしたら明記いたします。
---------------------------------------------
訂正後
---------------------------------------------
当方では Windows 7 home 64bit を使用しております。
OS以外の環境も必要でしたら明記いたします。
さて、これは環境により少し異なるようですが、
---------------------------------------------
結果的にログを汚すことになってしまい、申し訳ありません。
|
|
2011/10/10(Mon) 00:14:06|NO.42173
それ前に自分も経験した気がします…
解決方法は覚えてませんが、というか解決したかどうかさえ定かではありませんが、
フォントサイズ16くらいで作ってgzoomというのはだめですよね…ん?
今fontの説明を見ていて気づいたのですが、
>スタイル16を指定すると、文字の縁にあるギザギザが消えて滑らかな表示になります。ただし、画面モードがフルカラーで初期化されている必要があるほか、Windows9X環境はサポートされないのでご注意下さい。
フルカラーである必要がある……?
ためしに1行目にscreen 0, 640, 480, 1を追加して……
きれいに消えた!!!
でもま、これってかなりごり押しの策ですよね。まともな解決策をお待ちください。
力に慣れなくて申し訳ない…;
|
|
2011/10/10(Mon) 01:33:30|NO.42179
モジュールを作ってみました。
font_naを使うと強制的にアンチエイリアスがかかりません。
font_naの第1パラがフォント名、第2パラがフォントサイズです。
#module _font_na_
#uselib "gdi32"
#cfunc f2_CreateFont "CreateFontA" int,int,int,int,int,int,int,int,int,int,int,int,int,str
#func f2_DeleteObject "DeleteObject" int
#func f2_SelectObject "SelectObject" int,int
#deffunc font_na str f, int s
hFont = f2_CreateFont(s,0,0,0,0,0,0,0,0x80,0,0,0x03/*NONANTIALIASED_QUALITY*/,0,f)
f2_SelectObject hdc, hFont
return
// 終了時に呼び出し
#deffunc _font_exit onexit
f2_DeleteObject hFont
return
#global
font_na msgothic, 72
mes "abcdefghijklmnopqrstuvwxyz"
|
|
2011/10/10(Mon) 01:42:30|NO.42181
>>ひらまる様
とても早い回答ありがとうございます!
力になれないなんてとんでもないです。
gzoomは私も考えたんですが、文字があまりにも荒くなってしまうため理想的ではないです。
パレットモードにする方法ですが、こんな解決方法があるとは思っておりませんでした。
仰る通り確かに少しゴリ押しな方法かもしれませんが、
私が今回想定している用途はこの方法で解決できそうです。
今更ですが、どのような用途にこれが必要だったかというのを、
スクリプトでのせておきます。
ご回答頂き誠にありがとうございました。
スクリプトは非常に長くなってしまいます。申し訳ありません。
自分用に作ったものなので、コメントも無い上に書き方も雑です。
#module gradation_mes
#deffunc gmes_init int win_x , int win_y
gmes_tmp = ginfo_sel
screen 100 , win_x , win_y
screen 101 , win_x , win_y , 1
gsel gmes_tmp
return
#deffunc gmes_set str fontname , int fontsize , int fontstyle , int s_col , int e_col
gmes_tmp = ginfo_sel
gsel 101
font fontname , fontsize , fontstyle
mes "hoge"
mesx = ginfo_mesx
mesy = ginfo_mesy
gsel 100
gradf 0 , 0 , ginfo_winx , mesy , 1 , s_col , e_col
gsel gmes_tmp
return
#deffunc gmes str m
r = ginfo_r : g = ginfo_g : b = ginfo_b
gmes_tmp = ginfo_sel
gsel 101
color 255 , 255 , 255 : boxf : color
pos 0 , 0
mes "" + m
mesx = ginfo_mesx
mesy = ginfo_mesy
gsel 100
gmode 0 , ginfo_winx , mesy
pos 0 , mesy : gcopy 100
pos 0 , mesy * 2: gcopy 101
gmode 2 , ginfo_winx , mesy
pos 0 , mesy : gcopy 100 , 0 , mesy * 2
gsel gmes_tmp
color 255 , 255 , 255
gmode 4 , mesx , mesy , 256
gcopy 100 , 0 , mesy
color r , g , b
pos ginfo_cx , ginfo_cy + mesy
gmesx@ = mesx
gmesy@ = mesy
return
#global
; --------------------------------------------------------------------------------------------------
; モジュールここまで
; --------------------------------------------------------------------------------------------------
; --------------------------------------------------------------------------------------------------
; gmes_mod グラデーション文字列モジュール
; ヘルプ + サンプルスクリプト
; --------------------------------------------------------------------------------------------------
; gmes命令の初期化
;
; gmes_init p1 , p2
;
; p1 = gmes作業用ウィンドウ初期化Xサイズ
; p2 = gmes作業用ウィンドウ初期化Yサイズ
;
; 描画したい文字列が作業用ウィンドウのサイズを超える場合、超えた部分は表示されない。
; そのため、表示する可能性のある最大サイズを初期化時に設定しておくこと。
; Yサイズは都合上表示する可能性のある最大サイズを*3した数値以上にしておくこと。
; --------------------------------------------------------------------------------------------------
; gmes命令の設定を行う
;
; gmes_set "fontname" , p1 , p2 , p3 , p4
;
; p1 = フォントの大きさ
; p2 = フォントのスタイル
; p3 = グラデーション開始色の指定
; p4 = グラデーション終了色の指定
;
; "fontname" , p1 , p2 に関しては[font]命令のものと同じです。
; p3,p4パラメータは $RRGGBB の形式で指定します。(16進数)
; (例)
; 赤 = $FF0000
; 青 = $00FF00
; 緑 = $0000FF
; --------------------------------------------------------------------------------------------------
; グラデーション文字を表示
;
; gmes "strings"
;
; "strings" : 表示するメッセージ、または変数
;
; 基本的な使い方は[mes]命令と同じです。
; \nによる複数行には対応しておりません。
; [gmes_init]および[gmes_set]を先に実行しておく必要があります。
; --------------------------------------------------------------------------------------------------
; --------------------------------------------------------------------------------------------------
; 以下サンプルスクリプト
; --------------------------------------------------------------------------------------------------
gmes_init 640 , 480
screen 0 , 640 , 480
pos 50,80
gmes_set "MS Pゴシック" , 64 , 0 , $00FFFF , $0000FF
gmes "Hot Soup Processor"
gmes_set "MS P明朝" , 32 , 0 , $00FFFF , $0000FF
gmes "Hot Soup Processor"
pos 50,280
gmes_set "MS Pゴシック" , 96 , 0 , $FF0000 , $FFFF00
gmes "おにたま万歳"
もしこのモジュールを使いたい方がいらっしゃいましたら、
どうぞご自由にご利用下さい。
作者名の明記なども一切必要ありません。
いないとは思いますが、念のため。

| |
|
2011/10/10(Mon) 01:56:54|NO.42183
>>inovia様
ご回答ありがとうございます!
そしてわざわざモジュールまで作成して頂き、頭があがりません。
今後、inovia様が作って下さったモジュールを使って
何かゲームを作ったりアプリを作る機会があるかもしれませんが、
その点は問題ありませんか?
すばらしいモジュールなので是非利用していきたいのですが、
念のために許可だけ頂きたいと思います。よろしくお願いします。
|
|
2011/10/10(Mon) 01:57:43|NO.42184
>念のために許可だけ頂きたいと思います。よろしくお願いします。
組み込み・改造等ご自由にどうぞです!
|
|
2011/10/10(Mon) 11:46:12|NO.42197
解決しているようですが、一応、GDI+ を使う方法も提示しておきます。
半透明から、gradationまで、全て一つの命令がやってくれます。
#include "a2d.hsp"
alCreateImage 0
alGradientColor 0,0,10,0,RGBA(255,0,0,255), RGBA(,,,255)
alfillrect 0,0,ginfo_winx,ginfo_winy
alfont msGothic , 32 , 1
alGradientColor 0,0,ginfo_winx,ginfo_winy,RGBA(255,0,0,200), RGBA(255,255,255,200)
aldrawtext "隣の客はよく柿食う客だ\n東京特許許可局\nfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",0,0,ginfo_winx,ginfo_winy,1,1
alcopyimagetoscreen 0,0
redraw
|
|
2011/10/10(Mon) 16:09:10|NO.42214
>>inovia様
>組み込み・改造等ご自由にどうぞです!
ありがとうございます!是非使わせて頂きます。
>>info様
>半透明から、gradationまで、全て一つの命令がやってくれます。
なんと!?
そのような便利な命令があるとは知りもしませんでした。
それもhspの標準ヘルプに載っているようですね・・・;
確認を怠ってしまって申し訳ありません。
今回作りたかったのはアンチエイリアスのないグラデーション文字だったので、
a2dを使用することができませんが、描画がかなりキレイなので、
今後かなり多彩な方面で使っていきたいと思います。
教えていただき、誠にありがとうございました。
図々しいようですが、もしまだお返事を下さるお暇があれば
以下にもお答え頂ければ幸いです。
A2Dのリファレンスには目を通したつもりですが、また見逃していたらすみません。
A2Dでグラデーション文字を描画する際に、「縁取り」を付けるような機能はありますか?
自前でモジュールなどを組んで縁取りを実装してあげるしかないのでしょうか・・・?
|
|
2011/10/10(Mon) 17:48:55|NO.42225
使う方がいるとは思いませんが、どうぞお使い下さいと書いた手前
放置しておくわけにもいかないので・・・;
上記のグラデーション文字モジュールですが、
動作テストをするバージョンのまま貼り付けてしまったのでこのままでは使えません。
4〜5行目の
screen 100 , win_x , win_y
screen 101 , win_x , win_y , 1
をそれぞれ
buffer 100 , win_x , win_y
buffer 101 , win_x , win_y , 1
に変えて下さい。
|
|