OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

フォームにビットマップを表示

  • すぐに回答を!
  • 質問No.157508
  • 閲覧数241
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 23% (40/169)

PaintPicture LoadPicture("c:winnt\winnt.bmp"), _
0, _
0, _
ScaleWidth, _
ScaleHeight

  とかけば最大化で表示はするのですが
  画面のプロパティで背景を指定するときに表示位置の
  並べて表示みたいにしたいのですがどうすればできますでしょうか
  また、そのときに1つ1つのおおきさのしていもできるのですか
  教えてください。
  よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

あっサンプル出てきましたね。
ぼくも作ってみました。

多分の質問の文章からすると、拡大縮小を行いたいのでは?と思って、縮尺を変えた画像タイル張りを行っております。


画像は#1の方と一緒で、一度ピクチャボックスに読み込んで、その画像を操作しています。
何度もLoadPictureをするより効果的です。

ファイルは定数で宣言しています。
画像の大きさは、呼び込んだファイルの大きさのX,Y方向の0.2倍に設定しています。(変数:sngScale)
適当な値に変更してください。


必要なもの
フォーム
コマンドボタン1
ピクチャボックス1(Visible = False)


Private Const PIC_FILE As String = "c:\winnt\system32\setup.bmp"

Private Sub Command1_Click()
  Dim sngScale  As Single  '元の絵の縮小拡大率
  
  Dim lngPicW   As Long   '呼び込んだ絵の幅
  Dim lngPicH   As Long   '呼び込んだ絵の高さ
  
  Dim lngX  As Long '描画時のX座標
  Dim lngY  As Long '描画時のY座標
  Dim lngW  As Long '描画時の幅
  Dim lngH  As Long '描画時の高さ

  'もとの絵からの縮小拡大率をセット
  sngScale = 0.2

  'ピクチャの
  With Me
    With .Picture1
      'ピクチャボックスに絵を呼び込む
      .AutoSize = True
      .Picture = LoadPicture(PIC_FILE)
      
      'ピクチャボックスのサイズより、絵のサイズを得る
      lngPicW = .ScaleWidth
      lngPicH = .ScaleHeight
    End With
    
    '描画時の絵の幅高さを得る
    lngW = sngScale * lngPicW
    lngH = sngScale * lngPicH
    
    '描画のY座標初期化
    lngY = 0
    Do
      '描画のX座標初期化
      lngX = 0
      Do
        '描画する
        Call .PaintPicture(.Picture1.Picture, lngX, lngY, lngW, lngH, 0, 0, lngPicW, lngPicH, vbSrcCopy)
        
        'X座標を描画時の幅の分、X方向にずらす
        lngX = lngX + lngW
        
      'X座標がフォームの幅を超えた時ループを抜ける
      Loop While lngX < .ScaleWidth
      
      'Y座標を描画時の高さの分、Y方向にずらす
      lngY = lngY + lngH
    
    'Y座標がフォームの高さを超えた時ループを抜ける
    Loop While lngY < .ScaleHeight
  End With
End Sub


余談ですが、描画の命令はPaintPictureが標準でVBにありますが、それ以外にWindowsAPIでBitBltやStretchBltというのがあります。
検索サイトで「描画/方法」で検索をしたらたぶん出てくるとは思いますが、今回はPaintPicureが最も適しています。それは画像の拡大縮小の処理が一番早いからです。
逆に、縮尺を変えずに画像を転送するのであれば、BitBltが適しています。
あくまで余談ですが・・・
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 59% (729/1235)

>並べて表示みたいに これでどうでしょうか? Dim X As Long Dim Y As Long Me.AutoRedraw = False With Picture1 .Picture = LoadPicture("hoge.bmp") For X = ...続きを読む
>並べて表示みたいに

これでどうでしょうか?

Dim X As Long
Dim Y As Long

Me.AutoRedraw = False
With Picture1
.Picture = LoadPicture("hoge.bmp")
For X = 0 To Me.ScaleWidth \ .ScaleWidth
For Y = 0 To Me.ScaleWidth \ .ScaleWidth
Me.PaintPicture .Picture, X * .ScaleWidth, Y * .ScaleHeight
Next
Next
End With
Me.AutoRedraw = True
  • 回答No.2
レベル13

ベストアンサー率 59% (729/1235)

訂正 Me.AutoRedraw = False With Picture1 .Picture = LoadPicture("hoge.bmp") For X = 0 To Me.ScaleWidth Step .ScaleWidth For Y = 0 To Me.Scale ...続きを読む
訂正

Me.AutoRedraw = False
With Picture1
.Picture = LoadPicture("hoge.bmp")
For X = 0 To Me.ScaleWidth Step .ScaleWidth
For Y = 0 To Me.ScaleHeight Step .ScaleHeight
Me.PaintPicture .Picture, X, Y
Next
Next
End With
Me.AutoRedraw = True
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ