• 締切済み

ピクチャボックス間のコピー方法

たびたび質問しているhidezoです(^_^; 表題のように、ピクチャボックスにある画像を、別のピクチャボックスにコピーしたいのですが、うまくいきません。 おそらく簡単な解決策があると思うのですが、ヘルプを参照してもよく分かりませんでした。 プログラムの内容 オブジェクト Picture2,Picture3に同じ画像を代入 Piture2上にLineを描画 2回目以降のPiture2にLineを描画する際に一度Picture3を代入して元の画像に戻してからLineを描画 (ゲームでいうとキャラクタ移動でキャラクタと背景の重ね合わせみたいな感じです) やってみた方法 方法1(ダメでした) Picture2.Picture = Picture3.Picture 方法2(ダメでした) Picture2.PaintPicture Picture3.Picture, 0, 0 方法3(できたけど・・・) SET Picture2.Picture = TMP ※TMPは・・・ Set TMP = LoadPicture(strOpenFile) Set Picture3.Piture = TMP 方法3の場合、グローバル変数を使わなくちゃいけないので避けたいです。よろしくお願いします。

  • hidezo
  • お礼率85% (193/225)

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 方法1で出来ますけど。 VBのバージョンとかが違うから? あと、何か特殊な操作をしてますか?特にピクチャーボックスに。 補足をお願いします。 では。

hidezo
質問者

補足

VBは6.0です。 実はPicture1というオブジェクトに一度画像データを読み込んでいます。(Autosize=true) Picture1よりHeight,Widthを取得して、Picture2に縦横比を換えずに最大320x240pixになるようにスケールをかけて代入しています。(これは問題なくできています) そのPiture2をPiture3にコピーしたいのですが、うまくいきません。(Piture2,3はAutosize=False) 本来なら、Picture2と同様にPiture1からPiture3に代入すればいいのですが、Piture3へPiture2の代入は別オブジェクトでやっていて、何回も繰り返します。 ここで、毎回Picture1のHeight,Widthを取得するのも処理時間がかかるし、Height,Widthをグローバル変数にするのも嫌だと思っています。 以下に、ソースを付けます。(変数に無駄がありますが(^_^;) Private Sub mnuFileOpen_Click() Dim strOpenFile As String On Error GoTo err_mnuFileOpen CommonDialog1.Filter = "*.jpg|*.jpg|*.bmp|*.bmp|*.gif|*.gif" CommonDialog1.ShowOpen strOpenFile = CommonDialog1.FileName Picture1.Picture = LoadPicture(strOpenFile) 'Set TMP = LoadPicture(strOpenFile) intOrgPicX = Picture1.Width intOrgPicY = Picture1.Height If (320 / intOrgPicX) >= (240 / intOrgPicY) Then intScale = (240 / intOrgPicY) Else intScale = (320 / intOrgPicX) End If Picture2.Height = intOrgPicY * intScale Picture2.Width = intOrgPicX * intScale Picture2.Visible = True Picture2.PaintPicture Picture1.Picture, 0, 0, intOrgPicX * intScale, intOrgPicY * intScale Picture3.Height = intOrgPicY * intScale Picture3.Width = intOrgPicX * intScale Picture3.Picture = Picture2.Picture 'Set Picture3.Picture = TMP 'Picture3.PaintPicture Picture1.Picture, 0, 0, intOrgPicX * intScale, intOrgPicY * intScale err_mnuFileOpen: Exit Sub End Sub

関連するQ&A

  • ピクチャボックス内のコントロールを印刷

    VB6の質問です。 ピクチャボックスの内容を印刷したいのですがうまくいきません。 いろいろ調べてみたら文字とか画像は印刷方法あるみたいですけど ピクチャボックス内のテキストボックスやオプションボタンを印刷する方法がわかりません、、、 PaintPictureでやると白紙の状態で印刷されます。 なにかいい方法はありますでしょうか、、、

  • C#ピクチャーボックス再描画について

    C#ピクチャーボックス再描画について 動的生成したピクチャーボックスに文字を描画します そのあと、そのピクチャーボックスをD&DでForm内を移動できるようにしています その際、あるピクチャーボックスが別のピクチャーボックスの上を通過したり 他のコントロールが上になったりすると、描画した文字が消えてしまいます。 再描画について調べるとRefleshやUpdateとかができました。 しかし、Refleshを使うと文字を描画する前の状態を再描画してしまいます。 再描画の方法はTimerで10ミリ秒毎ぐらいにしようと思ってます。 Refleshをピクチャーボックスに文字を描画させた後に再描画できるように設定できればいいんですが…。 他に方法があったりしたら教えてください!!

  • ピクチャボックスの使用方法

    ピクチャボックスをピクセルモードに変更して、Width=2000位にしてLineとprintで描画をしています。 lineは0から2000まで線が引けるのですが、printで文字を書こうとすると、どうやら0から1000までしか書けないようなのです。 これは仕様なのでしょか? それともどこか設定を間違えているのでしょうか? どうか教えてください・・・

  • ピクチャーボックスの座標指定について

    ピクチャーボックス内で表示位置(座標)を指定して画像を表示したいです。 この場合loadpictureによる座標指定はできないのでしょうか? よろしくお願いします。

  • ピクチャーボックスでのスクロール方法

    ピクチャーボックスの中にPrintを使ってdataの出力やそのdataを基にしてLine等で作図をさせています。しかし、これらがピクチャーボックスの範囲を超える時は全体を見ることができません。リストボックスのようにスクロールして見るようにできないのでしょうか。画像dataなら分かるのですが、・・・・。よろしくお願いいたします。

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

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

  • ピクチャーボックスで四角形内を塗りたい。

    初歩的な質問でしたらすみません。 ピクチャーボックスに四角形を描画します。 その四角形の内側をクリックしたら、四角形の内側が 塗りつぶされるようにしたいと思っております。 黒で四角形を書き、青く塗りつぶす。というように ペイントの塗りつぶしのようなイメージです。 四角形の大きさが固定でしたら、何とかできたのですが、 寸法が変化するので微妙な大きさになると塗りつぶせない事が あるのでこまっています。 簡単に塗りつぶせる方法がありましたら教えてください。 形は四角形限定です。 どうぞよろしくお願いします。

  • VB6でのピクチャボックスの印字方法

    現在、VB6からのピクチャボックス印字に困っています。 ピクチャボックスに貼り付けている画像はメタファイル(.emf)ですが、これをPrinterオブジェクトで印字すると、画質が鮮明になりません。また、同じファイルをExcelに貼り付け印字するとすごく鮮明に印字されます。 ExcelのようにVB6できれいに印字させるのはどうしたら良いのでしょうか?

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

    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を上手く保存する方法は無いでしょうか? ご教授、お願いします。

  • ピクチャボックス, PaintPicture 内 LoadPicture関数の使い方

    For IA& = Picture02.LBound To Picture02.UBound Picture02(IA&).AutoRedraw = True Picture02(IA&).AutoSize = False Picture02(IA&).ScaleMode = vbPixels Picture02(IA&).Cls Next IA& でSub Form_Load()にて初期化したあとで IC& = Index Picture02(IC&).ScaleMode = vbPixels Picture02(IC&).PaintPicture LoadPicture(InFile$), 0, 0, YokoHaba&, TateTakasa& Picture02(IC&).Refresh と読み取ったときに EOIセグメントが存在しないJPGファイルをInFile$に指定したのときにPicture02(IC&).PaintPictureでハング(CPU=100%, 無応答)します。 ハングアップの検出方法、又はハングアップしない参照方法などの対応をご存知の方いらっしゃいませんか。 Open InFile$ -Close でEOIセグメントの存在をチェックするとわずか50KBのファイルに約1秒(GW-Basic, 80286並の速度)使ってしまいます。より高速な方法を探しています。 OS Win2000 SP2 Visual basic 6.0 SP5 「EOIセグメントが存在しないJPGファイル」はクライアントからサーバーへの送信途中で回線を物理的に切断することにより作成したものです。