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

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

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

Re[2]: 円描画時のぼやけ防止方法について


(過去ログ 35 を表示中)

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

■17733 / inTopicNo.1)  円描画時のぼやけ防止方法について
  
□投稿者/ moro (9回)-(2008/04/30(Wed) 23:20:53)

分類:[VB.NET/VB2005] 

2008/05/01(Thu) 08:39:27 編集(投稿者)

いつもお世話になっております。
moroと申します。

VB.NET2003でビットマップに円を描画したのですが線が一部ぼやけて困っています。
プログラムは以下のように作成しました。

Dim TestPen As New System.Drawing.Pen(System.Drawing.Color.Red, Single.Parse(1))
Dim TestBmp As New System.Drawing.Bitmap(ファイル名)
Dim TmpBmp As New System.Drawing.Bitmap(TestBmpの幅, TestBmpの高さ)
Dim TmpGra As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(TmpBmp)
Dim rect As System.Drawing.Rectangle = New System.Drawing.Rectangle(0, 0, TmpBmp.Width, TmpBmp.Height)
TmpGra.DrawImage(TestBmp , rect, 0, 0, TestBmp.Width, TestBmp.Height, GraphicsUnit.Pixel)
TmpBmp.Save("保存ファイル名", System.Drawing.Imaging.ImageFormat.Jpeg)
Dim SaveBmp As New System.Drawing.Bitmap("保存ファイル名")
Dim SaveGra As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(SaveBmp)
SaveGra.DrawEllipse(OutPen, SaveBmpの中心X, SaveBmpの中心Y, 100, 100)
SaveBmp.Save(("保存ファイル名2", System.Drawing.Imaging.ImageFormat.Jpeg)

TestBmp:jpegファイル(Format8bppIndexed)
TmpBmp :jpegファイル(Format24bppRgb)
SaveBmp:jpegファイル(Format24bppRgb)

TmpBmpを中間に入れている理由はFormat8bppIndexed形式のファイルでは
System.Drawing.Graphicsを作成し、加工することが出来なかったためです。
一旦Format24bppRgb形式に変換しています。
Penオブジェクトの色を黒にした場合は、ぼやけることなく描画されます。

上記問題についての回答をご存知の方がいらっしゃいましたら
解決策をご教授願います。




引用返信 編集キー/
■17736 / inTopicNo.2)  Re[1]: 円描画時のぼやけ防止方法について
□投稿者/ 魔界の仮面弁士 (705回)-(2008/04/30(Wed) 23:49:24)
No17733 (moro さん) に返信
> Dim TestPen As New System.Drawing.Pen(System.Drawing.Color.Red, Single.Parse(1))
これは、どこで使用されるのでしょうか?

また、「Single.Parse(1)」の意図が不明瞭です。
1.0F とか CSng("1") とか Single.Parse("1") ならば分かるのですが…。

> SaveGra.DrawEllipse(OutPen, SaveBmpの中心X, SaveBmpの中心Y, 100, 100)
この OutPen というのは、どのようにして生成されましたか?

それから、各種オブジェクトの Dispose が抜けていますが、それは正しく記述されていますか?

> TestBmp:jpegファイル(Format8bppIndexed)
> TmpBmp :jpegファイル(Format24bppRgb)
> SaveBmp:jpegファイル(Format24bppRgb)
TestBmp が、インデックスカラーの JPEG となっていますが、それはどういった物でしょうか?

> Penオブジェクトの色を黒にした場合は、ぼやけることなく描画されます。
JPEG なので、周辺画像との兼ね合いで、多少の滲みやノイズはどうしても発生しますよね。

気になるようであれば、品質を上げてみては如何でしょう。
http://dobon.net/vb/dotnet/graphics/encoderparameters.html

それと、Graphics のアンチエイリアス指定は、何か変更されていますか?
http://dobon.net/vb/dotnet/graphics/antialias.html
引用返信 編集キー/
■17751 / inTopicNo.3)  Re[2]: 円描画時のぼやけ防止方法について
□投稿者/ 凪瀬 (31回)-(2008/05/01(Thu) 09:24:19)
凪瀬 さんの Web サイト
・JPEGのブロックノイズ
・アンチエイリアス
のどちらの話題なんでしょうかね?
引用返信 編集キー/
■17754 / inTopicNo.4)  Re[2]: 円描画時のぼやけ防止方法について
□投稿者/ moro (10回)-(2008/05/01(Thu) 09:44:37)
魔界の仮面弁士さん、凪瀬さん
ご回答ありがとうございます。

>>Dim TestPen As New System.Drawing.Pen(System.Drawing.Color.Red, Single.Parse(1))
> これは、どこで使用されるのでしょうか?
 下記のOutPenの記述が間違っていました。
 正しくはTestPenです。

> また、「Single.Parse(1)」の意図が不明瞭です。
> 1.0F とか CSng("1") とか Single.Parse("1") ならば分かるのですが…。
""で囲む記述が抜けていました。


>>SaveGra.DrawEllipse(OutPen, SaveBmpの中心X, SaveBmpの中心Y, 100, 100)
> この OutPen というのは、どのようにして生成されましたか?
 下記のOutPenの記述が間違っていました。
 正しくはTestPenです。

> それから、各種オブジェクトの Dispose が抜けていますが、それは正しく記述されていますか?
 Disposeは記述してします。
 掲示板に記述する際に省略してしまいました。


>>Penオブジェクトの色を黒にした場合は、ぼやけることなく描画されます。
> JPEG なので、周辺画像との兼ね合いで、多少の滲みやノイズはどうしても発生しますよね。
BMP形式は問題なく描画されたのですがJPEG形式はどうしてもノイズ等が発生してしまいます。
 BMP形式のファイルを扱えたらよかったのですが今回はJPEG形式でしたので苦労しました。
 

> 気になるようであれば、品質を上げてみては如何でしょう。
> http://dobon.net/vb/dotnet/graphics/encoderparameters.html
>
> それと、Graphics のアンチエイリアス指定は、何か変更されていますか?
> http://dobon.net/vb/dotnet/graphics/antialias.html

魔界の仮面弁士さんのご指摘どおり参考ページに習って品質を上げてみたところ
ぼやけることなく円が描画されるようになりました。
アンチエイリアス指定は念のため、
SaveGra.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
SaveGra.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
を指定しました。

上記の通り品質、アンチエイリアスを指定することで解決できました。
ありがとうございました。




解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -