電子書籍の厳選無料作品が豊富!

私は今Visual Studio 2005(C++)のフォームアプリケーションでプログラムを組んでいるのですが、ビットマップ処理ができません。以下のプログラムにどのような変更を加えればできるようになるのでしょうか?
ご存知の方がいたら教えてください。

#pragma once

~フォームのデザイン部分のプログラム(自動)なので省略いたします~

#pragma endregion
private: Bitmap^ bmp;

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
}

private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
OpenFileDialog^ myDLG = gcnew OpenFileDialog();
myDLG->AddExtension = true;
myDLG->DefaultExt = "bmp";
myDLG->FileName = "*.bmp";
myDLG->ShowReadOnly = false;
myDLG->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg";
if(myDLG->ShowDialog() == System::Windows::Forms::DialogResult::OK){
this->Text = myDLG->FileName;
pictureBox1->Image = gcnew Bitmap(myDLG->FileName);
Invalidate();
}
}

private: System::Void 保存SToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
SaveFileDialog^ myDLG = gcnew SaveFileDialog();
myDLG->AddExtension = true;
myDLG->DefaultExt = "bmp";
myDLG->FileName = "*.bmp";
myDLG->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg | すべてのファイル(*.*) | *.*";
if(myDLG->ShowDialog() != System::Windows::Forms::DialogResult::OK){
return;
}
pictureBox1->Image->Save(myDLG->FileName);

Invalidate();
}

private: System::Void 閉じるCToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
if(MessageBox::Show("アプリケーションを終了しますか?","画像描画",MessageBoxButtons::OKCancel,MessageBoxIcon::Question)
== System::Windows::Forms::DialogResult::OK){
this->Close();
}
}

private: System::Void 編集ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
}

private: System::Void 回転180ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
}


}

よろしくお願いします。

A 回答 (1件)

 こんばんは。


 ピクチャーボックス内のビットマップを180度回転させたいのでしょうか?
 であるのでしたら、これで回転出来る筈です。以下参考に。

private: System::Void 回転180StripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
pictureBox1->Image->RotateFlip(System::Drawing::RotateFlipType::Rotate180FlipX);
pictureBox1->Invalidate();
}

この回答への補足

返事が遅れてしまい申し訳ありません。
すみません、回転180°というのはちゃんとビットマップ処理ができているかの確認用に作ったものなんです。
できればビットマップ処理をして動作できるようなプログラムがしたいのです。

例えば、
void CImage2Doc::Stock()
{
for(y=0 ; y<bmpY ; y++)
{
for(x=0 ; x<bmpX ; x++)
{
StockImage[x*3+y*bmpL] = BmpImage[x*3+y*bmpL];
StockImage[x*3+y*bmpL+1] = BmpImage[x*3+y*bmpL+1];
StockImage[x*3+y*bmpL+2] = BmpImage[x*3+y*bmpL+2];
}
}
}

という関数を用意して、

void CImage2Doc::180turn()
{
Stock();
int i;

for(y=0 ; y<bmpY ; y++)
{
i=bmpX;
for(x=0 ; x<bmpX ; x++)
{
BmpImage[x*3+y*bmpL] = StockImage[i*3+y*bmpL];
BmpImage[x*3+y*bmpL+1] = StockImage[i*3+y*bmpL+1];
BmpImage[x*3+y*bmpL+2] = StockImage[i*3+y*bmpL+2];
i--;
}
}
InvalidateRect(NULL,NULL,FALSE);
}
としてあげれば180°回転してくれるとおもうのですが、私がやりたいのはまさにこのような方法で、そういった処理をするにはどのような記述が必要なのか教えていただければなと思います。
よろしくお願いします。

補足日時:2008/08/04 12:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!