- - PR -
Graphicsオブジェクトを使用した画像作成
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-07-12 17:42
こんにちは。
VB.NETを使用して、折れ線グラフを作成することになり、 まず、X軸、Y軸の線と凡例の文字列を描画したところ、 何故か、横線が指定した終点のX座標より右にはみ出して描画されてしまいます。 色々試したのですが、改善しませんでした。 お分かりになりましたら、お教え願いないでしょうか? ソースは以下になります。 Private Sub CreateGraph(ByVal xsize As Long, ByVal ysize As Long) ' xsize + 100× ysize + 50のBitmapインスタンスを作成する Dim width As Integer Dim height As Integer Dim myPen As New Pen(Color.FromArgb(0, 0, 0), 1) width = xsize + 100 height = ysize + 100 Dim objBitmap As New Bitmap(width, height, PixelFormat.Format64bppPArgb) Dim graph As Graphics = Graphics.FromImage(objBitmap) '背景を白色クリア graph.FillRectangle(Brushes.White, graph.VisibleClipBounds) '縦線の作成 Dim x As Integer = 50 Dim i As Integer For i = 0 To 12 graph.DrawLine(myPen, x, 50, x, 350) '縦線 x = x + 80 Next Dim myPen2 As New Pen(Color.FromArgb(0, 0, 0), 1) graph.DrawLine(myPen2, 50, 50, 1010, 50) '横線の作成 Dim y As Integer = 100 '線の間隔 Dim maxy As Integer = 1000 'y軸のMAX値 Dim loopcnt As Integer Dim lwid As Integer Dim lichi As Integer = 0 Dim tani As Integer = 0 loopcnt = (maxy / y) 'ループ回数の計算 lwid = (height - 100) / loopcnt '線の座標間隔 lichi = 0 For i = 1 To loopcnt + 1 graph.DrawLine(myPen, 50, lichi + 50, 1010, lichi + 50) graph.DrawString(Str(1000 - tani), New Font("HG丸ゴシックM-PRO", 10), New SolidBrush(Color.Lime), New PointF(5, lichi + 45)) lichi = lichi + lwid tani = tani + 100 Next myPen.Dispose() graph.Dispose() '保存 objBitmap.Save("c:/test/tst.jpg",System.Drawing.Imaging.ImageFormat.Jpeg) objBitmap.Dispose() End Sub |
|
投稿日時: 2006-07-12 20:03
表示領域がずれるのって、GDIの仕様だったような気がするが、どこで得た情報化は忘れました。
識者の方フォローをお願い 描画領域がずれるというのを検索したら以下のサイトが見つかりました。 今回の件とは関係ないかもしれないけど http://www.para.tutics.tut.ac.jp/~ohno/mu/devroom/delphi_qa.html#GRAPHIC_Q1 #Delphiでの説明だけど、言いたいことはわかると思います |
|
投稿日時: 2006-07-12 20:52
ぐはっ。
久しぶりに他人のサンプルを動かしてはまってしまいました。 ピクセルの数え方とか、エイリアシングとかの関係かと思ってなめてました。 どうにも、.Net のバグっぽい感じですね。 とりあえず、PixelFormat を Format24bppRgb にしたら発生しなかったので、そちらで回避されてはいかがでしょうか? |
|
投稿日時: 2006-07-12 20:57
あと、xsize = 1200, ysize = 1200 で実行しましたが、できるだけサンプルは定数だけで乗せた方がいいと思います。
変数があると、どういう条件で発生するか、謎になってしまいますんで。 |
|
投稿日時: 2006-07-19 18:22
ありがとうございます。Format24bppRgbに変更したら、正常に表示されるようになりました。
サンプルも次回からは、気をつけるようにしたいと思います。 本当にありがとうございました。 |
|
投稿日時: 2006-07-19 20:42
Format64bppPArgb ってどんなデータなんだろうと思って、yahoo で調べてみたら
@IT の .NET TIPS のサンプルで使われているんですね。 なんで、こんなマイナーなのをサンプルで使ったんだろ、、、 それと、7番目にひっかかったサイトって、権利関係大丈夫なのかなとか 思ってみたり。 |
1