none
VB8でpictureboxに高速にBITMAP画像を表示する RRS feed

  • 質問

  • VB6では

    Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long

            Bitcor = 4  '32bit full color
            ImagSize = MatrixX(Selectsepa)
            Wigimage = Bitcor * ImagSize: '4はデータの奥行き(バイト(32ビット))
          ReDim Bytes1(Wigimage - 1, ImagSize - 1)
    '-------------------画像のグレースケールを高速に変更

        For j = 0 To 255
        For i = 0 To 255
             g = (ima(i, j) - iMin) / im
             If g > 1 Then g = 1
             If g < 0 Then g = 0
             pp = Int(255 * g)
             Bytes1(j * Bitcor, i) = pp
             Bytes1(j * Bitcor + 1, i) = pp
             Bytes1(j * Bitcor + 2, i) = pp
        Next
        Next
    ’-----------------------------------------------------------

    '----------bitmapを高速に表示

     Hbmimage = db.Picture5.Image

    Status = SetBitmapBits(Hbmimage, Wigimage * Hgtimage, Bytes1(0, 0))

    '-------------------ピクチャー5の画像をピクチャ1に任意の大きさでこーピーする

    Picture1.PaintPicture Picture5.Image, 0, 0, 128, 128, 0, 0, 256, 256   

    これをVB8でおこなうにはどのようにすればよいのでしょうか

    2010年4月25日 10:27

回答

  • 外池と申します。

    VB8とおっしゃるのは、Visual Basic 2005のことだという前提でお話します。(ただ、.Net Frameworkになってからはどのバージョンでも概ね同じだと思いますが・・・。)

    .Net FrameworkにはBitmapクラスがあり、ラスター・イメージを簡単に保持することができます。(まだ保持の段階。表示ではありません。) LockBitsというメソッドを使えば、ラスター・イメージの生データのバイト列にもアクセスできるようになりますので、カラー画像をモノクロ画像に変換する独自のプログラムを書くこともできます。

    Bitmapクラスの画像を表示するのは簡単です。おっしゃる「高速」の意味がよくわかりませんが、描画したい先(Form上に直接描画でも良いし、PictureBoxでも良いし、Controlから派生するクラスのオブジェクトなら何でも良い)のGraphicsオブジェクトを取得して、DrawImageメソッドを使えばOKです。適当に縮小して表示することも可。


    (ホームページを再開しました)
    • 回答の候補に設定 山本春海 2010年5月7日 6:18
    • 回答としてマーク 山本春海 2010年5月28日 4:17
    2010年4月27日 2:49