- 締切済み
プログラム上で画像作成
プログラム上での画像作成というのはできるのでしょうか? 例えば、関数を使って、tukutu(100,100); ※(xsize,ysize) 100*100サイズの画像を作るといったことはできるのでしょうか? しかし、作ったものをpicture1などに貼り付けられるものでないといけません。 もしくは、画像のリサイズを考えています。 例えば、rsize("a.bmp",100,100); ※("元画像",xsize,ysize) といった感じで、もともとある画像を100*100のサイズに変える方法でもいいのですが。 画像の縮小拡大など難しいことは使わないで、もし指定のサイズより元画像が小さかったらあまりの部分に白領域を足して、大きかったら削ってしまうといった具合です。 とにかくプログラム上で指定したサイズでの画像を作成したいです。 ソフトはビジュアルスタディオを使っています。 分かる方がいましたらよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
- machongola
- ベストアンサー率60% (434/720)
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 picture1と書いてありますが、C++CLIの方でしょうか? LoadImage()APIを使用すれば、画像の読み込みと同時にリサイズ( ストレッチ)も出来ます。 #ifndef __BITMAP_H__ #define __BITMAP_H__ #include<windows.h> #pragma comment(lib, "gdi32.lib") //C++用 inline HBITMAP WINAPI LoadMyImage(LPCWSTR lpwstrFileName, int iWidth, int iHeight) { HBITMAP hBmp = static_cast<HBITMAP>(::LoadImage(NULL, lpwstrFileName, IMAGE_BITMAP, iWidth, iHeight, LR_LOADFROMFILE | LR_CREATEDIBSECTION)); return hBmp; } //C++/CLI用 inline System::Drawing::Bitmap^ LoadMyImage(System::String^ sFileName, int iWidth, int iHeight) { using namespace System::Runtime::InteropServices; //String^からLPCWSTRへ文字列変換 System::IntPtr iPtrUni = Marshal::StringToHGlobalUni(sFileName); //ビットマップを読み込む HBITMAP hBmp = ::LoadMyImage(static_cast<LPCWSTR>(iPtrUni.ToPointer()), iWidth, iHeight); //変換に割り当てたメモリを消す Marshal::FreeHGlobal(iPtrUni); //HBITMAPを元にBitmapクラスを作成 System::Drawing::Bitmap^ bmp = System::Drawing::Bitmap::FromHbitmap(System::IntPtr(hBmp)); //HBITMAPを消去 ::DeleteObject(hBmp); return bmp; } #endif 使用する時(例えば、ダイアログからファイルを選択してロードする時) private: System::Void 開くStripMenuItem1_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 = ::LoadMyImage(this->Text, 200/*任意の横幅*/, 200/*任意の縦幅*/); //ピクチャボックスを更新する Invalidate(); } }
お礼
こんばんわ^^ 回答ありがとうございます。 CLIというのが何なのかよくわかりませんでしたが、おそらくエラーばかりでてしまうので違うものなのではないかと思います。 私が使っているのは、ビジュアルスタディオのCRL→フォームアプリケーションというものなのですが、このプログラムのどこかだけを使えばできるんでしょうか??