• 締切済み

LoadPictureしたイメージデータのサイズを知りたい

VB6で作成したプログラムにおいて、サイズが異なるイメージデータをLoadPictureでImageに一旦読込み、PaintPictureで同じPictureBoxに拡大して転送したいのですが、PaintPictureで全データを転送するにはイメージデータのサイズがわからないと全データが転送できません。 LoadPictureでImageに読込んだ場合に、データのサイズ(Width・Heightまたはデータ量)を確認する方法を教えてください。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

いまいち何がやりたいのか私が正しく理解できている自身が無いのですが... Image1.Picture.Width とか Image1.Picture.Height などで画像のサイズは 求められますよ。 単位を Pixel でということなら ScaleX、ScaleY メソッドで単位変換を 行います。   With Image1     .Picture = LoadPicture("C:\Sample.bmp")     x = Int(ScaleX(.Picture.Width, vbHimetric, vbPixels))     y = Int(ScaleY(.Picture.Height, vbHimetric, vbPixels))   End With   MsgBox CStr(x) & " × " & CStr(y) & "pix" こんな感じで Image コントロールの Picture のサイズを Pixel で求める ことができます。ここまでで、当初ご質問のサイズ取得は解決しませんか? これを使って2倍に拡大して PaintPicture したいなら、   With Picture1     .AutoRedraw = True     ’Picture1 で指定する単位も Pixel にする     .ScaleMode = vbPixels     .PaintPicture Image1.Picture, 0, 0, x * 2, y * 2, 0, 0, x, y   End With とか。。こういうことではないのでしょうか?

TAGAYAN
質問者

お礼

ありがとうございます。 ようやく、Picture.Width/HeightとParent.ScaleWidth/ScaleHeightの違いが理解できました。大変勉強になりました。 元々VB4で作成されたフォームのせいか、PaintPictureする際にもPictureに全画面表示されない等悩みましたが、昨日無事プログラムの改造が完了しました。 連絡遅くなり申し訳ありません。本当に助かりました。 また、よろしくお願いします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> VB のバージョンは? 失礼しました。書いてありましたねm(__;)m

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

VB のバージョンは?  # 最初から書いた方が良いですよ。 この記事が参考になりませんか? VB6と .Net 両方のサンプルコードがあります。 http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Image/

TAGAYAN
質問者

お礼

失礼しました。 OSは、WindowsXP SP2 VBは、VB6.0 で開発しています。 上記HP紹介いただき、ありがとうございます。 ただ、今回のケースの場合、イメージデータサイズが異なるため、イメージA(400ピクセル×300ピクセル)の全体表示ができるサイズのImageにイメージB(800×400)を読み込むとPaintPictureでは左上1/4しか表示されません。 ファイル名ではイメージAか、イメージBか判断できないため困っています。助けてください。

関連するQ&A

  • 印刷のクオリティ

    VB6より、PDFにて印刷物を作成するのですがアイコンが荒くて使い物になりません。 Printer.PaintPicture LoadPicture(jpgファイル),x1,y1,width,height でjpgファイルを指定します。jpgファイルはかなり解像度を上げています。それでも、このVBの命令だとあまりきれいではありません。 何かきれいになる方法はないでしょうか?

  • 画像表示についてです

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

  • Paintpicture描画時のクリックイベント

    お知恵を貸してください! ただいま「ランダムな場所にImageを描画して、そのイメージをクリックするとイベントが起きる」という プログラムを組んでいます。 Paintpictureを使って、ランダムに描画することはできたのですが、 描画したイメージをクリックしてもイベントの動作を行ってくれません。 使用しているのはVB6.0です。 プログラムは以下のとおりです。 Imageは透過GIF(Image1)と保険にマスクイメージ(Image2)を使用しております。 ------- ・描画プログラム Private Sub Command1_Click() End End Sub Private Sub Timer1_Timer() x = Int(rnd * Form1.Width) - (Image1.Width \ 2) y = Int(rnd * Form1.Height) - (Image1.Height \ 2) Form1.Refresh Form1.PaintPicture Image2, x, y, , , , , , , vbSrcAnd Form1.PaintPicture Image1, x, y, , , , , , , vbSrcPaint End Sub ------- ・行動プログラム Private Sub Image1_Click() MsgBox "Score gat" End Sub ------- アドバイス、ご指摘お願いいたします。

  • VB.NETのグラフィック描画で困っています

    VB.NETでのグラフィックの記述方法ですが 何かをクリックすると描画させるのではなく 単にあるsubプロシージャ内でグラフィックを描画させる記述する方法として pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) を教えていただきました。そこで private sub xy_keisan() '座標を計算させるプロシージャ disp_x() 'x座標に目盛りを表示させるプロシージャ disp_Y() 'xの目盛り数によってY座標の位置を変えて表示させるプロシージャ end sub private sub disp_x() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub private sub disp_y() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub のような記述(引数とか細かい所は端折っています)ですとdisp_yは描画されていますが,disp_xは消えてしまいます。 pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) が消えてしまう原因だとおもって宣言場所を変えてみましたが同じです 逆にこれが無いと描画させることが出来なくなります。 これの意味も今ひとつ判りません よろしくお願い致します

  • VB2010 でのPictureboxのフォント指定

    VB2010 でのPictureboxのフォント指定 現在 Pictureboxのフォントをプログラムの先頭で定義しているのですが、 '------------------------------------------------------------------------- Dim fnt As New Font("MS ゴシック", 9) With PictureBox1 .Image = New Bitmap(.Size.Width, .Size.Height) g1 = Graphics.FromImage(.Image) g1.Clear(.BackColor) End With g1.DrawString("TEST" fnt, Brushes.Black, IX,IY) '------------------------------------------------------------------------- 下記のようにループ内で指定したいのですが、どう定義すればいいでしょうか。 For i=1 to 10 <------------------------ここでfont指定したい g1.DrawString("TEST" fnt, Brushes.Black, IX,IY) next

  • C# Picturebox 縮小・拡大時の表示方法

    下記のようなコードで、画像の拡大・縮小を行っています。 ただ画像の縮小時、PictureBox内の余分な部分について、(1)縮小前の 画像が残像のように表示されています。 また通常、画像の拡大・縮小前の画像では画像サイズがPictureBoxよりも大きいサイズの 場合、スクロールバーを表示するようにしています。 (2)でも、画像拡大時、スクロールバーが出るには出ているのですが、画像全てを 確認できません。 (1)、(2)の問題について、解決方法をご存知の方、お願いです、、、教えてください。。。 かなり、困ってます。。。。 Bitmap img = new Bitmap(pictureBox1.Image.Tag.ToString()); //PictureBox1のGraphicsオブジェクトの作成 Graphics g = pictureBox1.CreateGraphics(); //拡大・もしくは縮小 RectangleF rect = new RectangleF(0, 0, zoom * img.Width, zoom * img.Height); g.DrawImage(img, rect); //BitmapとGraphicsオブジェクトを破棄 img.Dispose(); g.Dispose();

  • Visual Basic 拡大方法について

    こんばんわ Visual Basic 2010を使用してプログラミングをしています。 地図の画像を読み込み、ダブルクリックをすると拡大するというものを組んでいます。 ただ、ダブルクリックすると拡大するところまではできたのですが ダブルクリックしたところがパソコンの画面の中央にくるようにするにはどうすればいいかがわかりません。 方法が分かるかた助言、アドバイスよろしくお願いいたします。 参考までに現在組んでいる拡大部分のコードは以下のようになっています。 パソコンの画面サイズは1200*800です Private Sub PictureBox1_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.DoubleClick Dim bmp = New Bitmap(PictureBox1.Image, PictureBox1.Width * 1.5, PictureBox1.Height * 1.5) PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize PictureBox1.Image = bmp PictureBox1.Refresh() End Sub よろしくお願いいたします。

  • VC#2010 アスペクト比を保った拡大縮小

    こんにちは。アスペクト比を保った拡大縮小について質問です。 [やりたい事] ・本を開いたようなイメージで、Panelの中に2個のPictureBoxを左右に配置しています。 ・Panelのサイズを拡大縮小した時に、画像の元のアスペクト比を保ったまま拡大縮小したい。 ・その際、PictureBox自身に自分の位置や大きさを計算させたい。 [現状と問題点] ・なんとなく動作しているが、画像がチラついてしまう。 ・PictureBoxのBackColorに色をつけているが、画像の端に微妙にその色が見えている時がある。 ・自分なりに考えて計算式を作ってみましたが、実はもっとスマートな計算方法があるなら教えて頂きたいです。 [プロジェクトアップロード先] http://www1.axfc.net/uploader/so/2808804 テスト用の画像も入っています。パスワードは設定していません。 実行すれば現状の動作を確認できるようになっています。 [ソースコード抜粋] ・・・ 問題の箇所 → mPictureBox.RefleshPosition()の中身 private void Form1_Load(object sender, EventArgs e) { //Formにpanelを追加 Panel panel1 = new Panel(); panel1.Dock = DockStyle.Fill; this.Controls.Add(panel1); //panelにpictureBoxを追加 panel1.Controls.Add(new mPictureBox(panel1, eSide.Left, @"..\..\800_600.jpg")); panel1.Controls.Add(new mPictureBox(panel1, eSide.Right, @"..\..\600_800.jpg")); panel1.Refresh(); } ----------------------------------------------------------- //thisはmPictureBoxです //this.sideはenum eSide{Left, Right} というenumです。 //RefleshPosition()はmPictureBoxのメソッドです。 //mPictureBoxのPaintイベントや親のSizeChangedで呼ばれます。 public void RefleshPosition() { if (this.Image.Height > this.Image.Width) { //元画像の高さ > 幅 の場合 //自分(PictureBox)の高さ = 親(Panel)の高さ this.Height = this.Parent.Height; //自分(PictureBox)の幅  = [元画像の幅] * ([自分の高さと元画像の高さの倍率]) this.Width = (int)(Image.Width * ((double)this.Height / (double)this.Image.Height)); this.Top = 0; //↑で自分の幅を計算した結果、1ページ分の幅より広くなってしまっていたら if (this.Width > (this.Parent.Width / 2.0)) { //自分(PictureBox)の幅 = 親(Panel)の幅 this.Width = (int)(this.Parent.Width / 2.0); //自分(PictureBox)の高さ= [元画像の高さ] * ([自分の幅と元画像の幅の倍率]) this.Height = (int)(Image.Height * ((double)this.Width / (double)this.Image.Width)); //自分のTop = [親(Panel)の高さの半分] - [自分の高さの半分]    ←上下中央寄せにしたい為 this.Top = (int)((Parent.Height / 2.0) - (this.Height / 2.0)); } } else { //↑のif文と逆の計算 this.Width = (int)(this.Parent.Width / 2.0); this.Height = (int)(Image.Height * ((double)this.Width / (double)this.Image.Width)); this.Top = (int)((Parent.Height / 2.0) - (this.Height / 2.0)); if (this.Height > (this.Parent.Height)) { this.Height = (int)(this.Parent.Height); this.Width = (int)(Image.Width * ((double)this.Height / (double)this.Image.Height)); this.Top = 0; } } if (this.side == eSide.Right) { //右ページなら画像の左端は、親(Panel)の中央 this.Left = (int)(this.Parent.Width / 2.0); } else { //左ページなら画像の左端は、親(Panel)の中央 - 画像の幅  ←  本のように中央に寄せたい為 this.Left = (int)((this.Parent.Width / 2.0) - this.Width); } }

  • VB.NET ピクチャーボックスのImageの一部をクリップボードにコピー

    Picturebox1.Image = New Bitmap(Picturebox1.Width, Picturebox1.Height) Dim g As Graphics = Graphics.FromImage(Picturebox1.Image) これ以降 g.DrawLine 等で描画を行っています そして、ピクチャーボックスの一部の領域(矩形)を指定して クリップボードにコピーしたいのですがどうしたらいいでしょうか よろしくお願いします 他のピクチャーボックスにその一部をコピーできるだけでもいいのですが

  • VB2010で、キャプチャしたものを貼り付けるにはどうしたらいいのでし

    VB2010で、キャプチャしたものを貼り付けるにはどうしたらいいのでしょうか。 ご存知の方教えてください。よろしくお願いします。 ???の部分のコードがわかりません。 'キャプチャする Dim copy_bmp As New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height) Me.DrawToBitmap(copy_bmp, New Rectangle(0, 0, Me.PictureBox1.Width, Me.PictureBox1.Height)) PictureBox3 = copy_bmp??? copy_bmp.Dispose()