ICONファイルフォーマット

Similar documents
グラフィックス

ファイル操作

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

プロセス間通信

ICONファイルフォーマット

スライド 1

ファイル監視

正規表現応用

ListViewコントロール

VB.NET解説

ウィンドウ操作 応用

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

プラグイン

データアダプタ概要

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

構造体

Microsoft Excel操作

ファイル操作-インターネットキャッシュ

NotifyIconコントロール

C#の基本2 ~プログラムの制御構造~

スレッド操作 タイマー

ファイル操作-バイナリファイル

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

C#の基本

Userコントロール

ハッシュテーブル

DAOの利用

印刷

ブロック パニック

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

モグラ叩きプログラム

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

メール送信

ルーレットプログラム

Prog2_12th

データベースプログラミング

文書閲覧プログラム

ブロック崩し風テニス

VB実用⑦ エクセル操作Ⅰ

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

mySQLの利用

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

占領双六ゲーム

相性占いプログラム

バスケットボール

PowerPoint プレゼンテーション

アプリケーション

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

データベースプログラミング

Microsoft Word - DT-5100Lib_Manual_DotNet.doc

草競馬プログラム

相性占いプログラム

エクセル詳細 アドイン

3D回転体プログラム

Msako技術資料 

構造体

チア ダンス

占領双六ゲーム

PowerPoint プレゼンテーション

パラパラ漫画

インベーダープログラム

Prog2_2nd

PowerPoint プレゼンテーション

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

ドッグファイト

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

ASP.NET 2.0 Provider Model 概要

MISAO with WPF

万年暦プログラム

GUIプログラムⅣ

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

パラパラ漫画

Socketクラス

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

回文作成支援プログラム

プロシード

回文作成支援プログラム

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

3D回転体プログラム

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 ゲームプログラミング スプライト スプライト Pygame では pygame.sprite を用いる事でスプライトの管理 描画 衝突判定等を簡単に行う事が出来る 此れを利用してキャラクター操作に関する各種機能をスプライトクラスとして 1 個

画像閲覧プログラム

3軸加速度センサーモジュール MM-2860 書込み済みマイコンプログラム通信コマンド概要

Java - Visual Editor

回文作成支援プログラム

C 資料 電脳梁山泊烏賊塾 キャスト C++ のキャスト 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する C++ でのキャスト

MS Office オートメーション

グラフィックス 目次

平成 29 年度卒業研究 初心者のためのゲームプログラミング用 教材の開発 函館工業高等専門学校生産システム工学科情報コース 5 年 25 番細見政央指導教員東海林智也

WebBrowserコントロール


VB実用Ⅲ⑩ フリーデータベースⅡ

正規表現

キー操作

チャットプログラム

神経衰弱ゲーム

データベースⅠ

かべうちテニス

プラグイン

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel

Transcription:

グラフィックス 画像フォーマットエンコーダパラメータ 様々なフォーマットで画像を保存 Bitmap クラスを用いる事でビットマップ JPEG GIF PNG 等様々なフォーマットの画像を読み込み操作する事が出来る 更に Bitmap クラスや Graphics コンテナを用いて描画処理等を施したイメージをファイルに保存する事も出来る 此の時 読み込めるフォーマット同様に保存するフォーマットを選択する事が出来る 次のサンプルはファイルからイメージを読み込んで Bitmap オブジェクトを作成し 其れを様々なフォーマットで保存する物で有る 此の例では解り易さの為に名前空間のインポートはして居ない Visual Basic Public Class ImageFormatAndCodec Private Sub btnstart_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnstart.click Dim P As String = Application.StartupPath If Not P.EndsWith(" ") Then P &= " " Dim Src As System.Drawing.Image ' ファイルから Bitmap オブジェクトを作成 Src = System.Drawing.Bitmap.FromFile(P & "source.bmp") ' Bitmap オブジェクトを GIF で保存 Src.Save(P & "dest.gif", System.Drawing.Imaging.ImageFormat.Gif) ' Bitmap オブジェクトを PNG で保存 Src.Save(P & "dest.png", System.Drawing.Imaging.ImageFormat.Png) ' Bitmap オブジェクトを JPEG で保存 Src.Save(P & "dest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) ' Bitmap オブジェクトを解放 Src.Dispose() End Sub End Class C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; -1-

namespace ImageFormatAndCodec public partial class ImageFormatAndCodec : Form public ImageFormatAndCodec() InitializeComponent(); private void btnstart_click(object sender, EventArgs e) string p = Application.StartupPath; if (!p.endswith(@" ")) p += @" "; System.Drawing.Image src; // ファイルから Bitmap オブジェクトを作成 src = System.Drawing.Bitmap.FromFile(p + "source.bmp"); // Bitmap オブジェクトを GIF で保存 src.save(p + "dest.gif", System.Drawing.Imaging.ImageFormat.Gif); // Bitmap オブジェクトを PNG で保存 src.save(p + "dest.png", System.Drawing.Imaging.ImageFormat.Png); // Bitmap オブジェクトを JPEG で保存 src.save(p + "dest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // Bitmap オブジェクトを解放 src.dispose(); source.bmp(215kb) dest.gif(9.24kb) -2-

dest.jpg(15.9kb) dest.png(19.1kb) 実際に保存を行う為のメソッドが Save メソッドで有る 第一引数に出力するファイル名 第二引数に出力する画像のフォーマットを指定する 画像フォーマットには此処で使用した物以外にも幾つか有る また 第二引数を指定しない場合 詰り画像フォーマットを指定しないで保存した場合はビットマップで保存される様で有る 此の様に Bitmap オブジェクトのイメージを様々なフォーマットで保存する事が出来る 品質パラメータを指定した出力 画像フォーマットを直接指定してイメージを出力する事が出来るのは前項で説明した通りだが 色深度や輝度 更に JPEG 等では品質 ( 画質 ) を設定して出力し度いと謂う場合が有る 此の様な場合には前項の様な単純なコーディングでは実現出来ないが 或る程度の量のコードを記述する丈で様々なパラメータを指定してイメージを出力する事が出来る 次の例ではイメージをファイルに出力する際に品質パラメータを指定して JPEG として保存して居る ソースコードの詳しい解説は後述するので 先ずは次のコードを観て欲しい Visual Basic Public Class ImagingEncoderQuality Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim P As String = Application.StartupPath If Not P.EndsWith(" ") Then P &= " " Dim EncInfo As System.Drawing.Imaging.ImageCodecInfo ' JPEG 用の ImageCodecInfo オブジェクトを取得 EncInfo = GetEncoderInfo("image/jpeg") ' ImageCodecInfo オブジェクトが取得出来ない場合は中止 If EncInfo Is Nothing Then Exit Sub -3-

' エンコーダパラメータ Dim EncParams As New System.Drawing.Imaging.EncoderParameters() ' 品質を指定するパラメータ ( 品質 25) EncParams.Param(0) = New _ System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 25) ' 元のイメージ Dim Src As System.Drawing.Image ' ファイルから Bitmap オブジェクトを作成 Src = System.Drawing.Bitmap.FromFile(P & "source.bmp") ' ImageCodecInfo オブジェクトおよびエンコーダパラメータを指定して出力 Src.Save(P & "dest.jpg", EncInfo, EncParams) ' イメージを解放 Src.Dispose() End Sub ' 指定された MIME と一致するイメージエンコーダを取得するファンクションプロシージャ Function GetEncoderInfo(ByVal mimetype As String) _ As System.Drawing.Imaging.ImageCodecInfo Dim encoderinfoes() As System.Drawing.Imaging.ImageCodecInfo Dim encoderinfo As System.Drawing.Imaging.ImageCodecInfo ' イメージエンコーダ一覧を取得 encoderinfoes = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders() ' 一覧から指定された MIME と一致する物を探す For Each encoderinfo In encoderinfoes ' MIME が一致するか If encoderinfo.mimetype = mimetype Then Return encoderinfo Next ' 見付からない場合 Return Nothing End Function End Class C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; -4-

namespace ImagingEncoderQuality public partial class ImagingEncoderQuality : Form public ImagingEncoderQuality() InitializeComponent(); private void button1_click(object sender, EventArgs e) string p = Application.StartupPath; if (!p.endswith(@" ")) p += @" "; System.Drawing.Imaging.ImageCodecInfo encinfo; // JPEG 用の ImageCodecInfo オブジェクトを取得 encinfo = GetEncoderInfo("image/jpeg"); // ImageCodecInfo オブジェクトが取得出来ない場合は中止 if (encinfo == null) return; // エンコーダパラメータ System.Drawing.Imaging.EncoderParameters encparams = new System.Drawing.Imaging.EncoderParameters(); // 品質を指定するパラメータ ( 品質 25) encparams.param[0] = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.Quality, Int64.Parse("25")); // 元のイメージ System.Drawing.Image src; // ファイルから Bitmap オブジェクトを作成 src = System.Drawing.Bitmap.FromFile(p + "source.bmp"); // ImageCodecInfo オブジェクトおよびエンコーダパラメータを指定して出力 src.save(p + "dest.jpg", encinfo, encparams); // イメージを解放 src.dispose(); // 指定された MIME と一致するイメージエンコーダを取得するメソッド private System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(string mimetype) System.Drawing.Imaging.ImageCodecInfo[] encinfos; // イメージエンコーダ一覧を取得 encinfos = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); // 一覧から指定された MIME と一致する物を探す foreach(system.drawing.imaging.imagecodecinfo encinfo in encinfos) -5-

// MIME が一致するか if(encinfo.mimetype == mimetype) return encinfo; // 見付からない場合 return null; 先ずは GetEncoderInfo メソッドの動作から説明する 此のメソッドは MIME から其れと一致するイメージエンコーダを取得する為の関数で有る MIME とは Multipurpose Internet Mail Extension の略で 簡単に謂えばファイルの拡張子と同じ様な物で其のファイルの種類を特定する為に用いる物で有る MSDN に依ると 此の MIME は application/type と謂う形式に成って居て application はアプリケーション又はアプリケーションのクラスを表し type は一意の MIME の種類を表す ジャンル / 名称 と謂う風に考えても差し支えないと思う 然して 此のメソッドでは GetImageEncoders メソッドに依って得られたイメージエンコーダの配列から 引数として受け取った MIME と同じ物を持つイメージエンコーダを見付け出し 返す 次に btnstart をクリックした時の動作を説明する 此のメソッドでは先ず先程の GetEncoderInfo メソッドを用いて JPEG のイメージエンコーダを取得する JPEG の MIME は "image/jpeg" で有る イメージエンコーダが取得出来れば 引き続きエンコーダパラメータの設定を行う 16 行目では EncoderParameters のインスタンスを作成して居る 此れは EncoderParameter のインスタンスを複数格納する為のクラスで コンストラクタに何も指定しないと 1 つ丈 EncoderParameter を格納する事が出来る EncoderParameters を作成する事が出来る 亦 逆に 数値を指定した場合は其の分丈 EncoderParameter を格納する事が出来るインスタンスが生成される 其の次の 18 行目では EncoderParameter クラスのインスタンスを作成し 先程の EncoderParameters クラスのインスタンスのインデックス 0 に格納する 此のコンストラクタの一つ目の引数には Encoder クラスのオブジェクトを指定する 此の Encoder クラスはイメージエンコーダに対して指定するパラメータの種類を表す 此の例で使用して居る Encoder.Quality は Encoder クラスの静的フィールドで品質パラメータを表す 二つ目の引数に指定する値は一つ目の引数で指定したパラメータの実際の値と成る 其の値には様々な指定方法が有るが 品質の場合は 0 から 100 迄の整数値を指定する 猶 整数値には Visual Basic の場合 Integer(Int32) の値を指定しても問題は無いが Int32 で指定するオーバーロードは無いので Visual C# では Int16 か Int64 で指定する必要が有る 此の時点でイメージエンコーダとエンコーダパラメータの二者の用意が出来た 後は実際に此れを使用する丈で有る 画像フォーマットを指定して保存した時同様 既存のイメージを保存する際に此等のインスタンスを使用して保存を行う 其れが 32 行目に記述されて居る部分で Save メソッドに対して 2 つ目の引数にイメージエンコーダ 3 つ目の引数にエンコーダパラメータを指定する 斯うして出力されたファイルが次の画像で有る 元の画像は先程の物と同じ物を使用して居る dest.jpg(8.40kb) -6-

色深度パラメータを指定した出力 TIFF フォーマットで画像を出力する場合 色深度パラメータを指定する事が出来る TIFF を使用した場合 色深度は 1, 4, 8, 24, 32 の孰れかの値を指定する事が出来る筈なのだが 実験した環境では何故か 24 ビット以外での出力が出来なかった 次に其のコードを記述するが 其の殆どは先程の物と同じで有る Visual Basic Public Class ImagingEncoderColorDepth Private Sub btnstart_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnstart.click Dim P As String = Application.StartupPath If Not P.EndsWith(" ") Then P &= " " Dim EncInfo As System.Drawing.Imaging.ImageCodecInfo ' TIFF 用の ImageCodecInfo オブジェクトを取得 EncInfo = GetEncoderInfo("image/tiff") ' ImageCodecInfo オブジェクトが取得出来ない場合は中止 If EncInfo Is Nothing Then Exit Sub ' エンコーダパラメータ Dim EncParams As New System.Drawing.Imaging.EncoderParameters() ' 色深度パラメータ EncParams.Param(0) = New _ System.Drawing.Imaging.EncoderParameter( _ System.Drawing.Imaging.Encoder.ColorDepth, 24L) ' 元のイメージ Dim Src As System.Drawing.Image ' ファイルから Bitmap オブジェクトを作成 Src = System.Drawing.Bitmap.FromFile(P & "source.bmp") ' ImageCodecInfo オブジェクトおよびエンコーダパラメータを指定して出力 Src.Save(P & "dest.tif", EncInfo, EncParams) ' イメージを解放 Src.Dispose() End Sub ' 指定された MIME と一致するイメージエンコーダを取得するファンクションプロシージャ Function GetEncoderInfo(ByVal mimetype As String) _ As System.Drawing.Imaging.ImageCodecInfo -7-

Dim encoderinfoes() As System.Drawing.Imaging.ImageCodecInfo Dim encoderinfo As System.Drawing.Imaging.ImageCodecInfo ' イメージエンコーダ一覧を取得 encoderinfoes = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders() ' 一覧から指定された MIME と一致する物を探す For Each encoderinfo In encoderinfoes ' MIME が一致するか If encoderinfo.mimetype = mimetype Then Return encoderinfo Next ' 見付からない場合 Return Nothing End Function End Class C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ImagingEncoderColorDepth public partial class ImagingEncoderColorDepth : Form public ImagingEncoderColorDepth() InitializeComponent(); private void btnstart_click(object sender, EventArgs e) string p = Application.StartupPath; if (!p.endswith(@" ")) p += @" "; System.Drawing.Imaging.ImageCodecInfo encinfo; // TIFF 用の ImageCodecInfo オブジェクトを取得 encinfo = GetEncoderInfo("image/tiff"); // ImageCodecInfo オブジェクトが取得出来ない場合は中止 if (encinfo == null) return; // エンコーダパラメータ -8-

System.Drawing.Imaging.EncoderParameters encparams = new System.Drawing.Imaging.EncoderParameters(); // 色深度パラメータ encparams.param[0] = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.ColorDepth, Int64.Parse("24")); // 元のイメージ System.Drawing.Image src; // ファイルから Bitmap オブジェクトを作成 src = System.Drawing.Bitmap.FromFile(p + "source.bmp"); // ImageCodecInfo オブジェクトおよびエンコーダパラメータを指定して出力 src.save(p + "dest.tif", encinfo, encparams); // イメージを解放 src.dispose(); // 指定された MIME と一致するイメージエンコーダを取得するメソッド private System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(string mimetype) System.Drawing.Imaging.ImageCodecInfo[] encinfos; // イメージエンコーダ一覧を取得 encinfos = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); // 一覧から指定された MIME と一致する物を探す foreach (System.Drawing.Imaging.ImageCodecInfo encinfo in encinfos) // MIME が一致するか if (encinfo.mimetype == mimetype) return encinfo; // 見付からない場合 return null; 此の他にも指定出来るパラメータは幾つか有るが 其の殆どで例外エラーが発生する等して使用出来なかった 原因は良く解らないが パラメータの指定方法に原因が有ると考えられる dest.tif(25.0kb) -9-