こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC++フォームアプリケーション でのビットマップ処理

私は今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) {
}


}

よろしくお願いします。

投稿日時 - 2008-08-01 13:01:40

QNo.4219945

すぐに回答ほしいです

質問者が選んだベストアンサー

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

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

投稿日時 - 2008-08-01 23:45:07

補足

返事が遅れてしまい申し訳ありません。
すみません、回転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:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問