はじめに
仕事でDBからデータとってきてグラフを生成してメール送信するプログラムを作ったので、知見として記事に記す
環境
- OS - WIndows10 Pro
- 開発環境 - Visual Studio 2010(.Net Framework 4.0)
- Chartコントロールが.Net4.0からなので、それ以上が対象
コードと解説
'ChartコントロールのライブラリとMemoryStream、画像変換用ライブラリ
Imports System.Windows.Forms.DataVisualization
Imports System.IO
Imports System.Drawing.Imaging
'Chartオブジェクト作成
graph As New Charting.Chart()
'*************************************************************
'グラフに必要なプロパティやデータを追加する。ここでは省略
'最低限、サイズ・グラフタイプ、実際のデータ、など
'解説すると本筋から逸れるので調べてください
'データ、プロパティを設定したとする
'*************************************************************
'一時保存用のMemorySteamを用意
Dim graphPicMS As New MemoryStream
'Chartコントロールの保存メソッドでMemorySteamに保存する
'Bitmapで十分ならこれで終わり
graph.SaveImage(graphPicMS, System.Drawing.Imaging.ImageFormat.Bmp)
'Jpegにしたい用に以下の処理をする
'bitmapオブジェクト生成
Dim bmp As New Bitmap(graphPicMS)
'画像変換のエンコーダーの準備
'呪文だと思ってそのまま書いていいです
'引数は特別なことしなければ1で大丈夫です
Dim eps As New EncoderParameters(1)
'ImageQualityValueは画像品質。1~100の整数で指定。高いほうが画質良い
Dim ep As New EncoderParameter(Encoder.Quality, CLng(ImageQualityValue))
eps.Param(0) = ep
'エンコーダーに画像形式のパラメータを与える。引数で画像形式を指定する
Dim ici As ImageCodecInfo = GetEncoderInfo("image/jpeg")
'bitmapオブジェクトの保存メソッドにエンコーダーをかませてMemoryStearmに保存
bmp.Save(graphPicMS, ici, eps)
'これで変換保存完了
'エンコーダーに与える画像形式のパラメータを検索するメソッド
'読みづらくなるので分離。理解しないでそのまま書いてよし
Function GetEncoderInfo(mineType As String) As Imaging.ImageCodecInfo
Dim encs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
Dim enc As ImageCodecInfo
For Each enc In encs
If enc.MimeType = mineType Then
Return enc
End If
Next
Return Nothing
End Function
- Chartオブジェクトを生成
- Chartオブジェクトに必要な各種プロパティを追加
- データをChartオブジェクトに追加
- 画像を出力する準備をする
- 変換したデータをMemoryStreamに格納
0 件のコメント :
コメントを投稿