• ベストアンサー

PictureBoxにPSetしてそれをImageへ

 VBに関して経験の浅い者です。 今、タイトル通り、ピクチャーボックスオブジェクト(名前はPict1とする)に、 Pict1.PSet(i,j),color(適当な数) と言うコードを実行していって描画し、 画像を作ったとします。  それで、Pict1にそうして描いて表示されている画像を イメージオブジェクト(名前はImageとする)に送って表示させたいのですが、 方法が分かりません。  Image.[何か]=Pict1.[ナンか]とすれば良さそうだと言う検討を立ててみたの ですが、こんな風にプロパティの色々で解決できますでしょうか?  あと、イメージオブジェクトの説明に、「「AutoRedraw」を有効にしておくと フォームやピクチャーボックスが変更された時にそれが即複写される」とあったの ですが、例えば上のPict1の描写を反映させるにはどうすればいいのでしょう?  Imageに入力する以上はAutoRedrawのターゲット(?に相当する概念)を設定する 必要があると思うのですが、、、

  • help
  • お礼率85% (17/20)

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

  • ベストアンサー
  • dinowave
  • ベストアンサー率48% (20/41)
回答No.1

Image.Picture=Pict1.Image にして、Pict1のオブジェクトの「AutoRedraw」 をTrueにすればできますよ♪

help
質問者

お礼

早速でスマートなお答えありがとうございます。早速試してみます

その他の回答 (1)

  • Tattoko
  • ベストアンサー率17% (3/17)
回答No.2

 PSetメソッドを実行するより前に、まずPictureBoxのAutoRedrawをTrueにしておけばOKです。  AutoRedrawがFalseの状態では、PSetを実行した後にそのPictureBoxが他のウィンドウの裏に隠れたりするだけで画像が消えます。いったん描かれるだけで記憶されていないんです。よって、Imageプロパティは元のままになってしまいます。  とにかく、デザイン時にPict1のAutoRedrawをTrueにしておけば、   Image.Picture = Pict1.Image でできます。

help
質問者

お礼

なるほど、もう一つコツがあるわけですね。ありがとうございます。

関連するQ&A

  • C#のPictureBoxのImageについて

    Formに2つのピクチャーボックスを張り付けて、片方のピクチャーボックスに表示しているImageの特定の領域をもう片方にコピーして、それをファイルに保存しようとしたらエラーが出てしまいました。 コピーしているプログラムはこんな感じです。 Graphics g = pictureboxDst.CreateGraphics(); g.DrawImage(picbureboxSrc.Image, pictureboxDst.ClientRectangle, srcRect, GraphicsUnit.Pixel); と、単純にDrawImageでSrcからDstにコピーしているだけです。 で、pictureboxDst.Image.Save()を実行すると、Imageがnullですと怒られます。 Graphicsは、pictureboxと結びついているだけだというのはわかったのですが、DrawImageでコピーした先というのは、pictureboxDstのImageではないのでしょうか? たぶん、私の考え方がおかしいのだと思いますが、どう考えればいいのか教えてください。

  • ピクチャボックスに描画した画像の保存

    VB6.0にて、 http://www.uploda.org/uporg898462.jpg このようなものを作成しました。 折れ線グラフはプログラムにて後から描画したもの、 それ以外の目盛りなどは最初からピクチャボックスに描画してあるものです。 pic1,pic2は共にピクチャボックスです。 赤い線で囲まれたpic1を目盛り、グラフ、その他のテキストボックスや文字と共に画像として保存したいのですが、 SavePicture Pic1.Image, "C:\SaveTest2.bmp" とすると、pic1の大きさの、何も描画されていない真っ白な画像が保存されてしまいます。 また、SavePicture Pic2.Image, "C:\SaveTest2.bmp" (pic2の保存) とすると、折れ線グラフのみが描画され、目盛りは無くなった画像が保存されてしまいます。 2つのピクチャ共にAutoRedraw=Trueを設定しています。 pic1を上手く保存する方法は無いでしょうか? ご教授、お願いします。

  • VB PictureBoxの描画範囲

    VisualStudio2010のVBにて、ピクチャーボックスの範囲をプログラム中で大きくして描画をさせたいのですが、ピクチャーボックスのサイズを大きくしても、大きくした範囲には描画がされません。 やり方は↓の方法です。 まず、formにボタンとピクチャーボックスを300×200で配置して、 http://homepage1.nifty.com/rucio/main/dotnet/Samples/dnSampleKeepImage.htm ↑のページで書かれてた方法でグラフィックを再描画させています。 Public Class Form1 Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim g As Graphics = AutoGraphics(PictureBox1) PictureBox1.Width = 400 g.FillRectangle(Brushes.Black, 100, 100, 10, 10) '1つ目の図形 g.FillRectangle(Brushes.Black, 350, 100, 10, 10) '2つ目の図形 g.Dispose() End Sub Public Function AutoGraphics(ByVal picSource As PictureBox) As Graphics If picSource.Image Is Nothing Then picSource.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height) End If Return Graphics.FromImage(picSource.Image) End Function End Class これを実行すると、1つ目の図形は描画されていますが、拡大した範囲にある2つ目の図形は描画されていません。 ピクチャーボックスの範囲を大きくした所にも描画をさせたいと思っています。 よろしくお願いします。

  • イメージボックスについて

    こんにちわ、Visual Studio 2005のC++を使ってプログラミングしているものです。イメージボックスについてお聞きしたいのですが、 private:array< PictureBox^>^ picture; int n = 0; int m = 0; int l = 0; for ( int n = 0; n < 4; n++ ) { if(n % 4 == 0){m = m + 60; l = 0;} /** 4つずつImageboxを表示 **/ picture[n] = gcnew PictureBox(); /** イメージボックス生成 **/ picture[n]->Size = Drawing::Size( 50, 50 );  /** イメージボックスのサイズ **/ picture[n]->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage; picture[n]->Location = Drawing::Point( 10+50*l,10+m);  /** イメージボックスの位置座標 **/ picture[n]->Name = String::Format( L"pictures{0}", n );  /** イメージボックスの名前 **/ this->Controls->Add( picture[n] ); Int32^ o = gcnew Int32( 0 ); System::String^ filename = "C:/Documents and Settings/user/デスクトップ/画像/"; filename += o->ToString("000") + ".bmp";  /** フォルダ内の画像 **/ bmp[n] = gcnew Bitmap(filename,true);   picture[n]->Image = bmp[n];  /** イメージボックスnにイメージn表示 **/ l++; } といった感じで、とりあえず4つのイメージボックスを作ろうとしているのですがうまくいきません。画像ファイルの名前の足し方に問題があるのでしょうか@@; もしこのプログラムが通るようになったとしてもループ中に画像がなかったらエラーが起こってしまいますね。もし指定のフォルダを選んで、そのフォルダ内の画像を全て表示させるといったことはできないのでしょうか??それと今までデザイン時にピクチャボックスをダブルクリックすると、 private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {} といったクリック処理のための関数が現れるのですが、この場合はどう処理すればよいのでしょう? さらに言うとこれをパネルの上でやりたいのですが・・・ private: System::Void panel1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { panel1->Controls->Add( picture[0] ); } とりあえずこれは置いといて、どうプログラムすればよいのか分かる方がいればご教授お願いします。

  • picture boxの画像をimageに上下反転して表示したい

    お世話になります。mmc820です。 表題の通りですが、ピクチャーボックス(作業用で実際は表示されません)に描画した画像をイメージに上下反転した状態で表示させたいと思います。 ピクチャーボックスに上下反転して表示する方法は見つけたのですが、イメージに表示させる方法が見つからず困っております。 イメージへの反転表示は可能なのでしょうか? 皆様、良い方法がありましたらどうか御教示下さい。 もし不可能であれば「不可能です。」という旨のお答えでも結構ですので、ご意見お聞かせください。 当方の開発環境はWindows2000、VB6.0です。 また、説明に不足がありましたら補足いたします。 どうか宜しくお願いします。

  • pictureboxの表示について

    いつもお世話になります。 C#について質問です。VisualC#2008を使っています。 private PictureBox[] pictArray = new PictureBox[100]; private void Box_Load() { PictureBox pict; int nIdx = 0; while (nIdx < pictArray.Length) { pict = new PictureBox(); pictArray[nIdx] = pict; pict.Click += new EventHandler(pict_Click); nIdx++; } } のように、あるメソッドで配列にpictureboxの画像を代入(?)していく処理をしています。このメソッドを別のメソッドで呼び出し、 pictArray[1]に格納されているpicturebox pictArray[2]に格納されているpicturebox  …といった具合に、次々と表示させていきたいと考えています。しかし1つしかpictureboxが表示されません。具体的には以下のようなプログラムを組んでいるところです。 private void pict_Click(object sender, EventArgs e) { Box_Load(); kihon_pict.Location = new Point(10, yy); this.panel1.Controls.Add(pict); yy += 40; } 誰か解決策を教えていただけないでしょうか? よろしくお願いします。

  • コンボボックス内の画像データを取得する

    CComboBox m_combo; で宣言されたコンボボックスがあります。 そこに「picture a;picture b」と画像の名前が格納されています。 別に int pict; で宣言されていて picture aが指定されると pict = 0;  〃  b 〃     pict = 1; がpictに代入されるようにしました。 ここからが悩んでいて このpictから画像データを取得したい場合にはどうすればよいのでしょうか? ご教授の程よろしくお願いいたします。

  • ピクチャーボックスに点を打つ .NET

    VB6では、ピクチャーボックスに点を打つ場合は、 Picture1.PSet (100, 50) で良かったのですが、VB9ではどのようにするのでしょうか? また、.NETの画像について詳しく書かれているサイトはありますか

  • PictureBoxの画像の表示方法を教えて VB.NET

    VB.NET2003環境なのですが、 ピクチャーボックスに画像を表示したいのですが、 下記のようなことはできるでしょうか? ピクチャーボックスの大きさ640*240で固定 画像ファイル640*480 だった場合に、画像を縮小して、横長のピクチャーボックスの 中央に(左右に余白をつける)画像ファイルを表示したいです。 ピクチャーボックス自体の大きさを変える方法などは分かったのですが、 表示前にファイルの画像のサイズを小さくして、位置を指定して 表示する方法がわからないので、このようなことができましたら、 方法をご教示頂きたいです。 よろしくお願い致します。

  • ピクチャボックスのサイズを状況に応じて変えたい。

    度々お世話になります。 今、ピクチャボックスに描画を行い、別のピクチャボックス上のイメージに表示しています。 描画を行う範囲はその都度異なり、それに対応するためにピクチャボックスは可能な限り大きくしてあります。ところが、イメージに表示させる段階で、描画していない部分まで表示するため、見た目が悪く、使い勝手も悪いのです。そこで、作図範囲のみを表示させたいと考えています。 やはり、ピクチャボックスのサイズをどうにかするのが先決かと思いまして質問させていただきました。できれば、作図範囲に合った大きさになるようにその都度変化させたいと思うのですが、そういった方法はありますか? あるいは、作図範囲のみをイメージに表示する方法があればそれでも結構です。 何か良い方法があれば、御教示いただけると幸いです。 開発環境はWindows2000、VB6.0です。 宜しくお願いします。