- PR -

Graphicsオブジェクトを使用した画像作成

1
投稿者投稿内容
チャベス
会議室デビュー日: 2005/03/08
投稿数: 14
投稿日時: 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
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-07-12 20:03
表示領域がずれるのって、GDIの仕様だったような気がするが、どこで得た情報化は忘れました。
識者の方フォローをお願い

描画領域がずれるというのを検索したら以下のサイトが見つかりました。
今回の件とは関係ないかもしれないけど

http://www.para.tutics.tut.ac.jp/~ohno/mu/devroom/delphi_qa.html#GRAPHIC_Q1
#Delphiでの説明だけど、言いたいことはわかると思います
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2006-07-12 20:52
ぐはっ。

久しぶりに他人のサンプルを動かしてはまってしまいました。

ピクセルの数え方とか、エイリアシングとかの関係かと思ってなめてました。

どうにも、.Net のバグっぽい感じですね。

とりあえず、PixelFormat を Format24bppRgb にしたら発生しなかったので、そちらで回避されてはいかがでしょうか?
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2006-07-12 20:57
あと、xsize = 1200, ysize = 1200 で実行しましたが、できるだけサンプルは定数だけで乗せた方がいいと思います。

変数があると、どういう条件で発生するか、謎になってしまいますんで。
チャベス
会議室デビュー日: 2005/03/08
投稿数: 14
投稿日時: 2006-07-19 18:22
ありがとうございます。Format24bppRgbに変更したら、正常に表示されるようになりました。
サンプルも次回からは、気をつけるようにしたいと思います。
本当にありがとうございました。
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2006-07-19 20:42
Format64bppPArgb ってどんなデータなんだろうと思って、yahoo で調べてみたら
@IT の .NET TIPS のサンプルで使われているんですね。

なんで、こんなマイナーなのをサンプルで使ったんだろ、、、


それと、7番目にひっかかったサイトって、権利関係大丈夫なのかなとか
思ってみたり。
1

スキルアップ/キャリアアップ(JOB@IT)