• 締切済み

プログラム上で画像作成

プログラム上での画像作成というのはできるのでしょうか? 例えば、関数を使って、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

  • とあるプログラムを教えてほしいのですが

    はじめましてこんばんは hommado と申します。 じつは先週の授業でこんな問題を出されたんですがもしできたらとあるプログラムを教えてほしいのです。 問題は 「キーボードから何階調にするのかを読み込むことで、入力画像LAX.bmpを任意の階調数に変換する」という プログラムです。 一応下に素体のプログラムをおいたんで、其のプログラムに何か付け足す感じでお願いします。「/*******↓基本的には、この範囲に画像処理プログラムを書く****/」から 「 /********↑**************************************************/」の中にプログラムを書くかんじなのでもし分かったら教えてください。お願いします。 あと何か他の所に付け足すようなところがあったら教えてください ここから元のプログラム // Bitmapファイルを読み込んで, // 別のファイルに出力するだけのプログラムです #include<stdio.h> #define XSIZE 256 /* 画像の横サイズ*/ #define YSIZE 256 /* 画像の縦サイズ*/ void main(void) { int x,y; char fni[40],fno[40]; /* 入力ファイルと出力ファイルの名前を格納するための配列*/ unsigned char head[1078],buf[YSIZE][XSIZE]; /* 入力ファイル(ビットマップファイル)のヘッダ情報と輝度値情報を格納するための配列*/ unsigned char in_image[YSIZE][XSIZE]; /* 入力画像の画素の輝度値を格納するための配列*/ unsigned char out_image[YSIZE][XSIZE]; /* 出力画像の画素の輝度値を格納するための配列*/ FILE *fp,*fp2; /* ファイルポインタ*/ printf("ファイル名を入れてください:"); scanf("%s",fni); fp=fopen(fni,"rb"); /* 読み込み& バイナリモードでオープンする*/ /* 配列head にビットマップファイルのヘッダ情報が格納されます*/ fread(head,sizeof(unsigned char),1078,fp); /* unsigned char 型のデータ×個を配列head に読み込む*/ /* 配列buf にビットマップファイルの輝度値情報が格納されます*/ fread(buf,sizeof(unsigned char),XSIZE*YSIZE,fp); for(y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++){ in_image[y][x]=buf[y][x]; /* 画像の左下の画素が座標buf[0][0] です*/ } } printf("読み込み終了しました!\n"); printf("出力ファイル名を入れてください:"); scanf("%s",fno); /*******↓基本的には、この範囲に画像処理プログラムを書く****/       ここにプログラムを書いてください!      (もしここ以外で、他の所で付け足すプログラムがあったら何行目に       何を書くのかも教えてください) /********↑**************************************************/ fp2=fopen(fno,"wb"); /* 書き込み& バイナリモードでオープンする*/ /* 配列head の内容を出力ファイルに書き込む*/ fwrite(head,sizeof(unsigned char),1078,fp2); /* 配列out_image の内容を出力ファイルに書き込む*/ fwrite(out_image,sizeof(unsigned char),XSIZE*YSIZE,fp2); fclose(fp); /* ファイルをクローズする*/ fclose(fp2); /* ファイルをクローズする*/ printf("作業完了!\n"); }

  • 画像のサイズを横に伸ばす方法はありますか?

    画像のサイズを横に伸ばす方法はありますか? 画像サイズの拡大、縮小などでサイズをまず縦を指定したら横もそれに合ったサイズになって指定できません。 リサイズではなくて無理やり横だけに伸ばす方法はありますでしょうか?

  • 画像の拡張子

    画像の拡張子は、 .jpg .png .bmp の中でどれが一番綺麗ですか?? それと、画像をリサイズする時、 縮小アルゴリズムと拡大アルゴリズムは、何にしたら一番劣化なく、 高画質にリサイズ出来るでしょうか? 回答お願いしますm(_ _)m

  • 画像表示についてです

    picturebox1とpicturebox2を使ってbmpとjpgの画像を表示させています。 そこで、画像にも色々サイズがあるのですがpictureboxのwidthのサイズに合わせて画像の縮小拡大したいのですがどうやっていいのかわかりません。 教えてくださいお願いしますm(__)m ちなみにHeightはスクロールバーを使ってます。 Widthはスクロールバーを使わないプログラムです。

  • VC++プログラムをつかったBMP画像の拡大縮小について

    現在VC++をつかった画像を扱うプログラミングを学習中なのですが、画像データの取り扱いについてわからないことがあるため教えていただきたいです。 BMP画像をバッファに取り込んだあとで、画像の縦横を拡大縮小したデータを新たなバッファに格納したいのですが、画像を拡大縮小する方法がわかりません。いくつかのプログラムのソースを見させていただいたのですが、BITMAPINFOHEADER構造体の中のbiWidthやbiHeightの値を変えているだけのようなのです。 これらの値を変えるだけで、指定した幅と高さに変換された画像データが得られるのでしょうか? また、それで拡大縮小されるならば、変換された画像データは輝度情報が滑らかになるように何かしらの補正が加えられていたりするのでしょうか?それとも、途中途中の輝度を単純に抜いていたりするだけなのでしょうか。 その辺の原理についても教えていただけるとうれしいです。 お手数をかけますが、よろしくお願いします。

  • 画像の一括切り取り

    フリーソフトで画像ファイル(BMP,GIF,PNG,JPG)をフォルダ指定等で一度に読み込んで、 予め座標指定した範囲を切り取って保存する機能をもったものを探しています。 トリミングやリサイズのように画像全体ではなく、 選択範囲を一括保存できる機能があればどのようなものでも構いません。 また拡大・縮小機能は特に必要ありません。

  • XMLでJPEGスライドを作成_表示画像のリサイズ

    初めて質問をさせていただきます。 よろしくお願い致します。 下記の、adobe.comにある「XMLでJPEGスライドを作成する」で、 読み込む画像サイズがバラバラの場合に、 “表示サイズをそれぞれの画像によって変えたい”(縦のサイズだけ固定をし、中央に寄せて表示させたい) と試行錯誤しているのですが、なかなか進みません。。 ▼XMLでJPEGスライドを作成する http://www.adobe.com/jp/support/flash/applications/jpeg_slideshow_xml/ この解説の中の下記のページで、 http://www.adobe.com/jp/support/flash/applications/jpeg_slideshow_xml/jpeg_slideshow_xml07.html 「ステージ上のターゲットクリップのインスタンスをリサイズすると、 ロードされた画像やムービーは同じだけ拡大縮小されることも覚えておきましょう。 ターゲット領域をリサイズしたいのだが画像サイズを替えたくという場合は、 インスタンスではなくシンボル自体をリサイズしましょう。」 と記載があるので、そもそもこのサポートセンターの方法だと “表示サイズをそれぞれの画像によって変えたい”は難しいのでしょうか。。 (環境) WindowsXP flash 8 よろしくお願い致します

    • ベストアンサー
    • Flash
  • 画像の連続取り込み

    Visual Studio 2005のC++を使ってプログラムしている者です。 C#で画像の連続した取り込みができるプログラムを見つけて、C++でもできないかと思い、とりあえず"000.bmp"という画像を読み込めるプログラムを組んで見たのですがどうもうまくいきません。 Visual Studio の検索で以下のようにできましたが"'System::Object::ToString' : 関数に 1 個の引数を指定できません。"といったエラーがでてしまいます。ある程度近いところまでいっているとは思うのですが・・・どこが間違っているのかわかる方おりましたらよろしくお願いします。 Object^ o = gcnew Object; o = (Object^)0; System::String^ filename = "C:/Documents and Settings/Owner/デスクトップ/"; //画像の場所ではなくファイルの場所(例:デスクトップ) filename += o->ToString("000") + ".bmp"; //ファイルの中の画像を指定 g = gcnew Bitmap(filename,true);

  • 画像の表示について

    1.imageボックスを用いた場合、pictureプロパティで画像を参照した後Stretch=Trueにするとそのimageの大きさに合わせて画像を縮小して表示してくれます。   pictureボックスのときはその大きさに合わせて画像を縮小して表示できません。AutoSize=tureにしても画像の大きさにpictureボックスが大きくなってしまうだけです。 pictureボックスにはそのような縮小機能はないのでしょうか? 指定する画像を縮小して保存し直すしかないのでしょうか? そうすると表示したい大きさに合わせるのが大変で・・・。 2.ひとつのフォーム上に与えられた変数によって 画像を表示したいと考えています。 私たちが習ったのは 1. まずpictureボックスを1つ用意する。 2. 表示したい枚数だけimageボックスを準備しその中に画像をpictureプロパティで指定する。(画像5枚につきimageボックス5つ) 3. textボックスに数字をいれcommandボタンをおす。 4. その値によって picture1.piture=image1.picture という具合で表示させる。 こうなると表示したい画像が10枚あればimageボックスが 10個必要になりますよね。 そうなるとフォーム上がごちゃごちゃなってしまいます。 そうしないように画像をアドレスを指定して直接いれることはできませんか? image1.picture="gazou1.bmp"(エラーでした・・・。)みたいな感じで・・・。 そうするとimageボックスを1つしか作らなくてよいのですっきりするのですが。 以上2つよろしくお願いします。

  • 画像を一括リサイズ フリーソフト

    Windows 7 対応で、 画像(jpeg)を一括で リサイズ(縮小)するフリーソフトは、ないものでしょうか。できれば、指定のサイズにリサイズできればありがたいです。

専門家に質問してみよう