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

プロフィール

Akira

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

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

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

03 | 2017/04 | 05
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++/CLI】画像の拡大縮小表示(簡易版)

C++/CLIで簡単にできる画像の拡大縮小表示を紹介します。

今回、作成したプログラムはこんな感じ↓です。

画像の拡大縮小表示

このサンプルプログラムはこちら右ボタンで対象をファイルに保存)からダウンロードできます。
(プログラムはVisualStudio2005 Express Edtionで作成していますが、VS2008でも動作すると思います。)

作成手順は本当に簡単。
下図のようにフォームの上にMenuStripPanel、Panelの上にPictureBoxと配置していきます。

画像の拡大縮小表示

Panelをクリックすると、右上に三角マークが表示されるので、それをクリックし、
親コンテナにドッキングするをクリックします。

    画像の拡大縮小表示

次にパネルとピクチャボックスのプロパティを以下のように設定します。

 panel1->AutoScroll = true;
 pictureBox1->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;

■AutoScroll

trueに設定するとパネル上に配置されたコントロールコンテンツ(ピクチャボックスなど)がパネルの大きさより大きい場合は自動的にスクロールバーを表示し、コントロールをスクロールしてくれます。

■SizeMode

ピクチャボックスに設定されたイメージをどのように表示するかを設定します。

Normal画像をピクチャボックスの左上に合わせて表示します。
StretchImage画像をピクチャボックスの幅、高さに合わせて表示します。
画像の縦横比がくずれます。
AutoSizeピクチャボックスのサイズを画像サイズに合わせて変更します。
CenterImageピクチャボックスの中心と画像の中心を合わせるようにして表示します。画像サイズがピクチャボックスより大きい場合は、画像がはみ出して表示されます。
Zoom画像全体をピクチャボックス全体に表示するように画像表示サイズを変更し、ピクチャボックスの中心に表示します。
画像の縦横比はくずれません。


画像の読み込みは以前にも紹介しましたが、こんな感じ↓です。

 private: System::Void mnuFileOpen_Click(System::Object^  sender, System::EventArgs^  e) {
      //ファイルを開くダイアログの作成
     OpenFileDialog^ dlg = gcnew OpenFileDialog;
     //ファイルフィルタ
     dlg->Filter = "画像ファイル(*.bmp,*.jpg,*.png,*.tif,*.ico)|*.bmp;*.jpg;*.png;*.tif;*.ico";
     //ダイアログの表示
     dlg->ShowDialog();
     //ビットマップファイルから、Bitmapを作成
     Bitmap^ bmp = gcnew Bitmap(dlg->FileName);
     //ピクチャボックスをビットマップ画像サイズに合わせる
     pictureBox1->Width = bmp->Width;
     pictureBox1->Height = bmp->Height;
     //ピクチャボックスのImageへ
     pictureBox1->Image = bmp;
    }

あとは、ピクチャボックスの大きさを拡大縮小したい倍率に合わせて変更すれば、勝手に画像は拡大縮小し、スクロールバーは自動的に調整してくれます。

 private: System::Void mnuZoomEnlargement_Click(System::Object^  sender, System::EventArgs^  e) {
     //拡大(2倍)
     pictureBox1->Width *= 2;
     pictureBox1->Height *= 2;
    }
 private: System::Void mnuZoomReduce_Click(System::Object^  sender, System::EventArgs^  e) {
     //縮小(1/2倍)
     pictureBox1->Width /= 2;
     pictureBox1->Height /= 2;
    }

と、これだけ!
本当に簡単にすごいことができちゃいます。

ただし、大きい画像やモノクロ画像の上に文字や線などを表示したい場合など、不都合な場合もあります。
この場合はDrawImageを使えばいいのですが、その方法は

画像の拡大縮小表示(高機能版)のページで紹介しています。


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

この記事に対するコメント
Re: Iplimage縮小表示
お返事が遅くなり申し訳ありません。
DrawImageの関数ですが、最初のRectangleの部分は描画先(PictureBox)の領域、2番目のRectangleは描画元(Bitmap)の領域を指定するのですが、提示して頂いているソースコードでは、描画先と描画元の縦横比が異なるので、縦横比が崩れて表示されます。
縦横比を崩さないように表示するには、ここのページにあるように
PictureBoxのSizeModeプロパティをZoomにして
pictureBox1->Image = bmpFile
にするとか、ここ↓
 http://imagingsolution.blog107.fc2.com/blog-entry-287.html
のページにあるようにグローバル変換という手法により、画像を拡大縮小表示したりする事も可能です。
DrawImageを使う場合は、例えば
 float scale = 2.0f;
outImage -> DrawImage(bmpFile,
System::Drawing::RectangleF(0.0f, 0.0f,image[output,0]->width * scale, image[output,0]->height * scale),
System::Drawing::Rectangle(0.0f, 0.0f, image[output,0]->width, image[output,0]->height),
GraphicsUnit::Pixel);
のように、描画先と描画元の縦横比を崩さないように指定する事で、表示も縦横比が崩れません。
つまり、DrawImageで指定する描画先の領域は、必ずしもPictureBox全体の領域を指定する必要はなく、描画元で指定された領域を、どこの領域に描画をするかを指定します。
この方法だと、若干、計算が面倒ですが、平行移動や拡大縮小など、細かい表示が可能となります。
【2013/12/22 21:53】 URL | Akira #- [ 編集]

Iplimage縮小表示
OpenCVのIplimageを縦横比を維持したままpicutureBoxに縮小表示する方法を教えてください。
貴サイトのいくつかのページを参考にして作成したのですが、
縦横比が崩れた状態で縮小されpictureBoxに表示されています。
下記が記載したコードになります。
回答お願い致します。

pictureBox1 -> SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;

Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);
pictureBox1->Image = bmpPicBox;
Graphics^ outImage = Graphics::FromImage(pictureBox1 -> Image);

Bitmap^ bmpFile = gcnew Bitmap(image[output,0]->width, image[output,0]->height, image[output,0]->widthStep
, System::Drawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(image[output,0]->imageData));

outImage -> DrawImage(bmpFile,
System::Drawing::Rectangle(0, 0, pictureBox1->Width, pictureBox1->Height),
System::Drawing::Rectangle(0, 0, image[output,0]->width, image[output,0]->height),
GraphicsUnit::Pixel);
【2013/12/19 16:45】 URL | Ackie #- [ 編集]

画像表示できました!が・・・・
どうもSW20です。
ご指導のおかげでここ数日で目的画像が表示できるようになりました。
しかし、以下の問題点が残ってしまいました。
・C++ B方向uliderでは横表示だったのが、今回縦表示になっている。
・画像の隅っこがかけてしまっている(ピクチャボックスに対して横方向)
・同じ画像が二重に表示されている気がする(縦方向)

先日見ていただいたソースで何か上記に関係するところはありますでしょうか?
アドバイスいただけると助かります。
【2008/11/16 10:34】 URL | SW20 #- [ 編集]

メールアドレスの記載をお願いします。
SW20さん。こんにちは。
コメント頂きありがとうございます。
ただ、残念ながらメールアドレスの記載がなかったので、お返事ができません。
(コメントをしてもらった人だけにお返事できる機能があればいいんですけど...)
ということで、お手数ですが、メールアドレスを記載の上、コメント(名前(SW20)だけでOKです。)をお願いします。
少し気がついた事があります!
【2008/11/15 15:32】 URL | Akira #- [ 編集]


SW20さん。こんばんは。
*.bin形式のファイルを開くのは、なかなか難しいようですね。
まず、画像データの場合は、画像の幅、高さ、カラーか?モノクロか?などの情報がどうしても欲しくなります。
通常のビットマップファイル(*.bmp)ではこの情報がビットマップファイルの最初の方に記録されていて、その部分を参照します。
(ビットマップファイルの場合、どのようになっているのか?は
http://imagingsolution.blog107.fc2.com/blog-entry-44.html
のページを参照下さい)
おそらく、参考にされているC++ Builder(私は触ったことがありませんが...)のソースでも画像データの幅や高さなどの情報を取得し、画像データを格納するためのメモリを確保し、画像データを読み込む処理になっているかと思います。
ということで、まずは*.binのファイルフォーマットが知りたい感じです。
フリーのバイナリエディタで「TSXBIN」というソフトがあるのですが、このソフトでビットマップファイル(*.bmp)を開いてみると、雰囲気がわかると思います。
ダウンロード先↓
http://www.net3-tv.net/~m-tsuchy/tsuchy/tsxbin.htm
もしかすると、このソフトで*.binファイルを開くと、何かの参考になるかもしれませんね。
最悪...
コメント欄のメールアドレスを記載頂き、「管理者だけに表示を許可する」にチェックを入れて頂いて、コメント頂けると、もう少し具体的な話ができると思います。
【2008/11/14 02:51】 URL | Akira #- [ 編集]

追記
どうもです。
変数の件、うまくいきました。ありがとうございます。
この件も、あれから色々と試して見てるんですが、うまくいかないんですよね。
C++ Builderでできたものを頂いたので参考にしながらやってみてはいるものの、やっぱり開発環境が異なると初心者には壁が・・・。
1つ判ったことがあるんですが、ビットマップ形式のファイルを読込んで、色分解し、
決まった成分だけピクチャボックスに表示するという考えと似たような処理を行えばいいような気がしてきました。
とは言うもののハードルは高いですね(w
何か参考になるものないですか?
またご教授いただければと思います。
よろしくお願いします。
【2008/11/13 20:33】 URL | SW20 #- [ 編集]


SW20さん、こんばんは。お久しぶりです。
*.bin形式の画像ファイルが開けないという事ですが、汎用的な画像のファイル形式としては*.bin形式というものは無いかと思われます。
そのため、以下、推測ですが...
おそらくCISで画像を取り込んだソフトのオリジナル形式で、ファイルの先頭に画像の幅や高さなど、次に画像データがバイナリ形式で保存されたものかと思われます。
そのため、この*.binファイルを開くには、お使いのソフトで、どのようなフォーマットで*.binファイルに保存されているのかを調べ、そのフォーマット形式に合わせてファイルを開いてあげる必要が出てきます。
そう言った意味だと、ビットマップファイル(*.bmp)はファイルフォーマットが標準的に決められた、バイナリ形式保存のファイルなのですが、今回はビットマップファイル(*.bmp)形式でCISの画像データを保存する事はできないでしょうか?
そうするとピクチャボックスに表示することも簡単だと思います。
って、的外れな事を言っていたらゴメンナサイ。
【2008/07/07 22:36】 URL | Akira #- [ 編集]


どうもご無沙汰しております。SW20です。
その節はお世話になりました。
また、今回ご質問がありご教授いただければと思い書込みいたしました。
現在CISで読込んだ*.bin形式の画像ファイルをピクチャーボックスに表示するように作ってみているのですが、うまくいきません。
オープンファイルダイアログを使用して*.bin形式のファイルをピクチャーボックスに表示する事はできないのでしょうか?
ご存知でしたらアドバイスいただけると助かります。
【2008/07/07 20:32】 URL | SW20 #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/66-117a0db2
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計