投稿者 ころんぱ  (社会人) 投稿日時 2011/2/2 23:24:44
■shu様
ついさっき、『弾幕的なものを作りたいです!』の中の南場様のサンプルを見てみました。画像を描画するまでの宣言の過程が見やすくのっていますね。少しずつでも調べてみようと思います。完結しているソフトでしたので、手軽に動いてるところが見れるのも助かります
他の分もひとつひとつおっかけて調べてみようと思います

■るきお様
bmp画像のdpiの件は参考になりました。bmpファイルを直接右クリック→プロパティ→「概要」で確認出来ますね。2dpiでした。96dpiにして、改めて実行してみるとうまくいきました;;ありがとうございます

今回の件は、
>何かのソフトで画像を開いた時と、VBのプログラムで画像を表示させた時とで大きさが違うので、同じ大きさで表示させたい
で間違いありません

表示させていたのは、サンプルと同一の画像をbmp化したものでしたが、フォームが全てマゼンダで埋まり、bmpの左上にドットを入れても(かなり拡大されているため)霧のようなものが見えるだけ、という感じでした

dpiは、日頃使用しているAZ-PAINTERでbmp変換すると2dpiになってしまうようです。ちょっとツールは探してみます。(ちなみに 96dpiで等倍になるようですが、実際はdpiを元に常に拡大縮小が活きている、という感じみたいですね。あまり意識する必要は無いかもしれませんが)

とりあえず、今回のロジックを元にいろいろ試してみたいと思います。講座も是非参考にしていきます


●ソースです↓
Public Class Form1

    Private mainGraphics As Graphics
    Private PlayerImage As Bitmap

    'Private Property Center As ImageLayout

    Public X As Integer 'X座標 追記
    Public XZ As Integer '移動量 追記


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Init()
        Timer1.Enabled = True
        X = 0 'X座標 追記
        XZ = 0 '移動量 追記
    End Sub
    Private Sub Init()

        '▼描画用のGraphicsクラスの確保(技術的な処理)
        If mainGraphics Is Nothing Then
            '初回のみ生成
            Dim bmp As New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height)
            Me.BackgroundImage = bmp
            mainGraphics = Graphics.FromImage(bmp)
        End If

        'exeと同じフォルダーにあるPlayer1.bmpを読み込む。
        'これができるのは、ファイルのプロパティで出力ディレクトリにコピーする設定になっているから。
        'PlayerImage = Image.FromFile(Application.StartupPath & "\CHARA1.bmp") 元

        PlayerImage = Image.FromFile("D:\110201 VB GAZOU\aaa.bmp") '画像読込書換
        ' ダブルバッファリング 追記
        Me.DoubleBuffered = True
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        '描画されているものを消して全面を黒くする。
        mainGraphics.Clear(Color.Black)

        '座標演算追記 XZ=移動量
        X = X + XZ

        'X座標の位置100を基準に増減速追記 XZ=移動量
        If X > 100 Then
            XZ = XZ - 1
        Else
            XZ = XZ + 1
        End If

        mainGraphics.DrawImage(PlayerImage, X, X)

        'フォームを再描画
        Me.Invalidate()

    End Sub
End Class


※ただ、実はもう、たまらずマップチップを並べてスクロールさせるところまで一気に組んでみました。描画とダブルバッファリングというのを知ったので・・。
長いことやりたかったマップチップを使った2Dのマップ表示&スクロールがやっと出来ました(泣)
(描画までの部分はまだほとんど理解していませんが、描画が出来ればかなり楽しくVBを続けられそうです)