配列を使ったビットマップクラス
VC++を使ったフォームアプリケーションでビットマップなどの画像を表示させ、ピクセル処理を施せるプログラムを作りました。このプログラム上ではピクチャボックスを1つ用意していますが、今後もっと多くのピクチャボックスが必要になってきます。以下のプログラムではBitmapクラスのbmpをピクチャボックス1の画像に入れています。単純にBitmapクラスのbmpを増やせば(例:bmp1)、ピクチャボックスが増えても平気ですが、処理の関係上配列を使いたいと思っています。なので下に書いてあるプログラムのbmp->という部分をbmp[0]->というふうに変えたいと考えています。自分なりに調べて(1)、(2)の部分を変えればいいと思うのですがどうもうまくいきません。わかる方がいたらご教授ください、おねがいします。
#pragma once
namespace bmp {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Text;
using namespace System::Collections::Generic;
/// <summary>
/// Form1 の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
bmp = nullptr; ……… (1)
//Bitmap^ bmp[300];
}
//省略//
#pragma endregion
//private: array<Bitmap^>^ bmp = gcnew array<Bitmap^>(300); ……… (2)
private: Bitmap^ bmp;
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
bmp = gcnew Bitmap("C:/Documents and Settings/Owner/デスクトップ/lena.bmp",true);
pictureBox1->Image = bmp;
}
private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {
/*bmp = gcnew Bitmap("C:/Documents and Settings/Owner/デスクトップ/lena.bmp",true);*/
int x,y;
int w = bmp->Width;
int h = bmp->Height;
for(x = 0; x < w; x++){
for(y = 0; y < h; y++){
if(x < (w * 0.05) || y < (h * 0.05) || (y > (h - (h*0.05)))&&(y < h) || (x > (w - (w*0.05)))&&(x < w)){
Color pixelColor = bmp->GetPixel( x, y );
Color newColor = Color::FromArgb( 255, 0, 0 );
bmp->SetPixel( x, y, newColor );
}
}
}
pictureBox1->Image = bmp;
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
}
};
}
お礼
回答ありがとうございました。 そうです、こんな感じのことがしたかったんです。 これを参考にして完成できました。 回答No.1さんも書いてましたようにControls.AddRenge(PicBox) がポイントなんですね。 ありがとうございました。