[VB.net]コンソールアプリでChartコントロールによるグラフ生成とMemoryStteam保存

はじめに

仕事で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

  1. Chartオブジェクトを生成
  2. Chartオブジェクトに必要な各種プロパティを追加
  3. データをChartオブジェクトに追加
  4. 画像を出力する準備をする
  5. 変換したデータをMemoryStreamに格納

0 件のコメント :

コメントを投稿