はじめに
仕事で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 件のコメント :
コメントを投稿