C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: 縁取りした文字列にアンチエイリアスをかける方法


(過去ログ 164 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■94872 / inTopicNo.1)  縁取りした文字列にアンチエイリアスをかける方法
  
□投稿者/ こぱ (1回)-(2020/05/29(Fri) 09:21:26)

分類:[.NET 全般] 

縁取りした文字列にアンチエイリアスをかけたいのですが
うまくいきません、


コードは以下のものを使用しています。



Dim g As Graphics = Graphics.FromImage(bmp2)


' 補間方法の設定
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor



g.TextRenderingHint = TextRenderingHint.AntiAlias


Dim fnt As New Font("Arial", 28)


Dim sizeInPixels As Single = fnt.SizeInPoints * g.DpiY / 72

Dim gp As New System.Drawing.Drawing2D.GraphicsPath()
gp.AddString(file_time, fnt.FontFamily, 0, sizeInPixels, TextOrigin, StringFormat.GenericDefault)


'文字列の縁を描画する
g.DrawPath(New Pen(Color.Black, CInt(sizeInPixels / 6.6)), gp)



'文字列の中を塗りつぶす
g.FillPath(Brushes.White, gp)


gp.Dispose()

fnt.Dispose()



https://dobon.net/vb/dotnet/graphics/antialias.html

このページによると

g.TextRenderingHint = TextRenderingHint.AntiAlias

でアンチエイリアスがかかるらしいのですが、
このコードだとかかりません。

gp.AddStringには対応していないのでしょうか?

どなたかご教授願います。



引用返信 編集キー/
■94875 / inTopicNo.2)  Re[1]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ Hongliang (1039回)-(2020/05/29(Fri) 10:31:25)
実際にアンチエイリアスをかけるのはAddStringのタイミングではなくてDrawPathのタイミングであり、DrawPathが描画するのはGraphicsPathで提示されたパスであって、そのパスの生成元が文字であることは区別できないので、TextRenderingHintは担当違いになります。
代わりにSmoothingModeを使用します。
引用返信 編集キー/
■94876 / inTopicNo.3)  Re[2]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ こぱ (2回)-(2020/05/29(Fri) 10:57:23)
ありがとうございます。

うまくいきました。

ちなみに、アンチエイリアスをかけたとしても
https://1.gigafile.nu/0605-b132778df1c5f671ec216f6de21a2ebf5

この画像のように
数字の「4」の頭に、一本線が残ってしまいます(分かりづらければ、拡大して見ていただけますでしょうか?)。

イラレだと、境界線を描画した時に
角を、四角にするか、丸くするか選択するオプションがあるのですが、
VB.NETでもそういうオプションはございますでしょうか?
引用返信 編集キー/
■94877 / inTopicNo.4)  Re[3]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ Hongliang (1040回)-(2020/05/29(Fri) 14:13:12)
DrawPathする際に使用するPenのプロパティに用意されていますね。
https://qiita.com/AioiLight/items/4f6aa763e2ddfffcf0e3
引用返信 編集キー/
■94878 / inTopicNo.5)  Re[4]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ こぱ (3回)-(2020/05/29(Fri) 14:50:55)
ありがとうございます。

提示くださった通りに、
LineJoinのオプションを変えてみたのですが、
g.DrawPath(New Pen(Color.Black, CInt(sizeInPixels / 6.6)) With {.LineJoin = LineJoin.Bevel}, gp)

わたしの環境では、良くも悪くもならず、変化無しでした。
Arialが影響しているのかと思い
メイリオも試してみましたが、やはり変化無しでした。


Dim SF As New StringFormat()
SF.FormatFlags = StringFormatFlags.NoWrap
SF.Trimming = StringTrimming.None

この辺も入れてみましたが変化無しでした。

引用返信 編集キー/
■94879 / inTopicNo.6)  Re[5]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ Hongliang (1041回)-(2020/05/29(Fri) 14:57:30)
提示したページの「まとめ」によると、Bevelは候補外のようですが…。
引用返信 編集キー/
■94880 / inTopicNo.7)  Re[6]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ こぱ (4回)-(2020/05/29(Fri) 15:20:13)
No94879 (Hongliang さん) に返信
> 提示したページの「まとめ」によると、Bevelは候補外のようですが…。

それは分かっています

roundが良いのは分かっていますが、
RoundでもBevelでも変化無しだったという意味です

引用返信 編集キー/
■94881 / inTopicNo.8)  Re[7]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ こぱ (5回)-(2020/05/29(Fri) 15:35:57)
ただし、どの設定にしても
Roundと同じような結果になるので
なぜか最初から最良の設定になるようです
これ以上良くならないようであればこれで行こうと思います

引用返信 編集キー/
■94882 / inTopicNo.9)  Re[8]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ Hongliang (1042回)-(2020/05/29(Fri) 18:27:42)
とりあえず私が試した限りでは、Arial 28ptで0-9a-zA-Zの62文字に対して、
Round, Bevel: トゲなし
Miter: MiterLimitが2.0まではトゲなし、2.5でAMVW辺りにトゲ発生
MiterClipped: MiterLimitが3.0まではトゲなし、3.5でMV辺りにトゲ発生
未指定: Miterと同じ
となりました。

// Windows10 1909; gdiplus.dll=10.0.18362.836
引用返信 編集キー/
■94883 / inTopicNo.10)  Re[9]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ こぱ (6回)-(2020/05/29(Fri) 18:58:27)
確認していただきありがとうございます。

2.0や3.5というのは何の値のことを指していますでしょうか?
 
引用返信 編集キー/
■94884 / inTopicNo.11)  Re[10]: 縁取りした文字列にアンチエイリアスをかける方法
□投稿者/ こぱ (7回)-(2020/05/29(Fri) 19:05:10)
すいません、理解できました。
そして私のコードにミスがあることにも気がつきました
どうもありがとうございました。
助かりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -