画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

05 | 2017/06 | 07
S M T W T F S
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C#,VB.NET】高速描画コントロールをバージョンアップしました。

 PictureBoxにGraphicsプロパティなどを追加して、再描画などの行うコントロールをバージョンアップしました。


【.NET】GraphicsBoxコントロール


今回の主な変更点はGraphicsオブジェクトをダブルバッファにしました。
これで、おそらく普通の.NETの描画サンプルよりも、少し高速に描画できると思います。

かなり地味ですが、それなりに便利かと...

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C#】マウスホイールで画像の拡大縮小

これまで紹介してきた記事の内容を使って、マウスホイールで画像を拡大縮小する方法を紹介します。
(必要な知識) これらを使って、下図のようにマウスポインタを中心として、画像の拡大縮小するプログラムを作成しました。
サンプルプログラムのダウンロードはこちらより

サンプルプログラム実行例


画像の拡大縮小表示のポイントは、任意点周りの回転移動でも紹介しているように、画像の拡大縮小では原点を中心として画像を拡大縮小するので、任意の点を中心として拡大縮小する場合は中心の点を原点へ移動し、拡大縮小後、元の位置へ移動する処理を行います。 点(X、Y)を中心に画像を拡大表示する場合
マウスホイールで画像の拡大縮小
点(X、Y)を原点へ移動します。
   マウスホイールで画像の拡大縮小
原点へ移動後、画像の拡大縮小処理を行います。
   マウスホイールで画像の拡大縮小
点を元の位置へ戻します。
   マウスホイールで画像の拡大縮小
サンプルプログラムは以下の通り
サンプルプログラムのダウンロードはこちらより

やっている事の割には、意外と簡単。
昔は大変だった...
Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C#】マウスホイールイベントの追加方法

C#のマウスホイールイベントは、Visual Studioのプロパティウィンドウのイベントでは表示されていないため、自分でイベントを登録する必要があります。

まずはサンプルプログラムを参照下さい。
サンプルプログラムのダウンロードはこちらより

Formのコンストラクタ部分でマウスホイールイベント(MouseWheel)を登録しています。
サンプルプログラムでは、ピクチャボックスのイベントとして追加しています。

this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel);

実際のイベント処理を行う部分は

private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{

}

ここで、一つ注意点があり、これだけではMouseWheelにイベントが入ってくれません。
MouseWheelイベントを発生させるには、明示的にイベントを発生させるオブジェクト(サンプルではpictureBox1)にフォーカスを設定する必要があります。

そこで、サンプルではpictureBox1_Clickイベントでフォーカスを設定しています。

private void pictureBox1_Click(object sender, EventArgs e)
{
        // ピクチャボックスにフォーカスを移す
        pictureBox1.Focus();
}


実行画面
マウスホイールイベントの追加方法
Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C#】ビットマップファイルをバイナリで開く

これまでOepnCVのようなC言語のライブラリを使う事が多かったので、ライブラリをそのまま使えるC++/CLIでプログラムする事が多かったのですが、アプリっぽいプログラムを作ろうとすると、ところどころで不満な点もあったので、今回はC#のお勉強プログラム第一弾、ビットマップファイル(*.bmp)をバイナリで開くプログラムを作成してみました。

ただし、ビットマップの輝度値を参照したいだけであれば、【C++/CLI】画像の輝度値を取得、設定するのページでも紹介しているようにLockBits~UnlockBitsを使った方が簡単です。

まず、ビットマップファイル(*.bmp)をバイナリで開くためにビットマップファイルのフォーマットを知らないとできません。 このフォーマットについてはビットマップファイルフォーマットのページでも紹介していますが、おさらいです。 ビットマップファイルの構造は
BITMAPFILEHEADER
BITMAPINFOHEADER
カラーパレット(RGBQUAD)
(無い場合もある)
画像データ
(データは画像の左下から順に格納されています)
カラーの場合はBGRBGR・・・の順

C言語でのそれぞれの宣言では、
typedef struct tagBITMAPFILEHEADER {//全14Byte
        WORD    bfType;                //2Byte
        DWORD   bfSize;               //4Byte
        WORD    bfReserved1;     //2Byte
        WORD    bfReserved2;     //2Byte
        DWORD   bfOffBits;           //4Byte
} BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER{//全40Byte
        DWORD   biSize;                      //4Byte
        LONG       biWidth;                    //4Byte
        LONG       biHeight;                  //4Byte
        WORD      biPlanes;                 //2Byte
        WORD      biBitCount;              //2Byte
        DWORD   biCompression;    //4Byte
        DWORD   biSizeImage;          //4Byte
        LONG        biXPelsPerMeter;  //4Byte
        LONG        biYPelsPerMeter;  //4Byte
        DWORD    biClrUsed;             //4Byte
        DWORD    biClrImportant;      //4Byte
} BITMAPINFOHEADER;

typedef struct tagRGBQUAD {
  BYTE    rgbBlue;
  BYTE    rgbGreen;
  BYTE    rgbRed;
  BYTE    rgbReserved;
} RGBQUAD;

のようになっています。 ビットマップファイルは上記の順番でヘッダ情報(画像の幅や高さなど)が記録されているので、ファイルの先頭から順に2byte、4byte、2byte、2byte、4byteとファイルを読み込めばBITMAPFILEHEADERが読み込め、同様にBITMAPINFOHEADERなど、次々とファイルを読みこめばビットマップファイルを開く事が可能となります。

ここで、C言語の型でWORDやLONGなどが出てくるのですが、これはそのままC#では使えないので、.NETで使える型との対比は以下のようになります。

C言語.NETデータサイズ(バイト数)
BYTEByte1
WORDUInt162
DWORDUInt324
LONGInt324
この型についてはVB.NET/VB6.0/CLR/C/C++/Win32API 型一覧表のページが参考になりました。

ファイルの読み書きにはSystem.IO.File.Open、System.IO.FileStream.Close、System.IO.File.Read、System.IO.File.Write、System.IO.File.Disposeの各メソッドを用います。 詳細はMSDNでご確認下さい。↓
File.Openメソッド
http://msdn.microsoft.com/ja-jp/library/system.io.file.open%28VS.80%29.aspx
FileStream.Closeメソッド
http://msdn.microsoft.com/ja-jp/library/system.io.stream.close%28v=VS.80%29.aspx
FileStream.Readメソッド
http://msdn.microsoft.com/ja-jp/library/system.io.filestream.read%28v=VS.80%29.aspx
FileStream.Writeメソッド
http://msdn.microsoft.com/ja-jp/library/system.io.filestream.write%28v=VS.80%29.aspx
FileStream.Disposeメソッド
http://msdn.microsoft.com/ja-jp/library/ms227422%28v=VS.80%29.aspx
ただ、ここで問題が一つ。
FileStream.Readメソッドでは読み込んだ値はバイト配列へ格納されるため、バイト配列からInt32などの型へ変換する必要が出てきます。
同様にFileStream.Writeメソッドでは、バイト配列を指定してファイルへ書き込む必要があります。

ここで、バイト配列から各Int32などの型へ変換するにはSystem.BitConverterクラスのToInt32メソッドなどを用います。 その逆に各型からバイト配列へ変換するにはGetBytesメソッドを用います。
(参考)System.BitConverterクラス
http://msdn.microsoft.com/ja-jp/library/system.bitconverter_members%28v=VS.80%29.aspx

これらを駆使して、やっとビットマップファイル(*.bmp)をバイナリで開く事が可能となります。 このサンプルプログラムはこちら↓
そして、このバイナリファイルの読込、書込のメソッドImagingSolution.BitmapBinary.LoadとImagingSolution.BitmapBinary.Saveを用いた処理例は以下の通りです。
処理的にはぜんぜん意味がないですが、画像の各輝度値を反転させて戻してます。
Loading...
スポンサーリンク



現在の閲覧者数: / 合計