• 締切済み

プログラム上で画像作成

プログラム上での画像作成というのはできるのでしょうか? 例えば、関数を使って、tukutu(100,100); ※(xsize,ysize) 100*100サイズの画像を作るといったことはできるのでしょうか? しかし、作ったものをpicture1などに貼り付けられるものでないといけません。 もしくは、画像のリサイズを考えています。 例えば、rsize("a.bmp",100,100);  ※("元画像",xsize,ysize) といった感じで、もともとある画像を100*100のサイズに変える方法でもいいのですが。 画像の縮小拡大など難しいことは使わないで、もし指定のサイズより元画像が小さかったらあまりの部分に白領域を足して、大きかったら削ってしまうといった具合です。 とにかくプログラム上で指定したサイズでの画像を作成したいです。 ソフトはビジュアルスタディオを使っています。 分かる方がいましたらよろしくお願いします。

みんなの回答

回答No.3

 画像を送付したのですが、表示されない様です(駄目だこりゃ)。  と言う事で、もう一度。

回答No.2

 こんばんは。補足頂きました。  う~む、チョッと不明瞭ですな。 >>CLIというのが何なのかよくわかりませんでしたが、おそらくエラーばかりでてしまうので違うものなのではないかと思います。  ビジュアルスタジオの「C++」である事は間違いなさそうでしょうか?  でしたら、  (1)を右クリック  (2)に「共通言語ランタイムサポート(/clr)」を選択すれば其のまま使える筈。  此れで無理であるならば、別の言語の可能性があります。

回答No.1

 こんばんは。  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(); } }

earth_star
質問者

お礼

こんばんわ^^ 回答ありがとうございます。 CLIというのが何なのかよくわかりませんでしたが、おそらくエラーばかりでてしまうので違うものなのではないかと思います。 私が使っているのは、ビジュアルスタディオのCRL→フォームアプリケーションというものなのですが、このプログラムのどこかだけを使えばできるんでしょうか??

関連するQ&A