【C++/CLI】画像の拡大縮小表示(簡易版)

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

 

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

 

 

このサンプルプログラムはこちら
SimpleZoomImage.zip
(VisualStudio2005 Express Edtionで作成)

 

作成手順は本当に簡単。
下図のようにフォームの上に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メソッドをお使い下さい。

【C++/CLI】画像の拡大縮小表示(簡易版)」への1件のフィードバック

  1. ピンバック: 【C++/CLI】画像の拡大縮小表示(高機能版) | イメージングソリューション

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください