0

私はwxPythonを学んでいます。私の質問は、ビットマップを作成する方法です。各ピクセルにR、G、Bの値がありますが、そこからビットマップを作成する方法がわかりません。wx.BitmapFromBufferを使用してみましたが、このバッファーを作成する方法がわかりません。私は各ピクセルを調べ、線形にR、G、Bコンポーネントのリストを作成しましたが、期待どおりの結果は得られませんでした。バッファの構築方法を理解していますか?

速度が遅すぎるため、wx.MemoryDCを使用してビットマップに各ピクセルを描画したくありません。

ありがとうございました!

編集:wxPythonデモのアプローチを使用します-RawBitmapAccess。

    buf = numpy.empty((w,h,3), numpy.uint8)
    n = 29000
    for i in xrange(w):
        for j in xrange(h):
            r = int(n*255*field[j,i])
            if r > 253: 
                r = 253
            buf[i, j, 0] = int(r)
            buf[i, j, 1] = int(r)
            buf[i, j, 2] = int(b)
            #dc.SetPen(wx.Pen(wx.Colour(r,r,b)))
            #dc.DrawPoint(i,j)
    bmp = wx.BitmapFromBuffer(w, h, buf)
    gc = wx.GraphicsContext.Create(dc)
    gc.DrawBitmap(bmp, 0, 0, w, h)

以前の描画方法(ループ内のコメント付きの2本の線)のコメントを外すと、必要なもの(1つのファジーボール)が得られます。私が奇妙な絵を持っていることを彼らにコメント解除しないと、それはいくつかの断片のために垂直に分割され、それぞれがそれ自身のファジーボールを持っています、そしてそれは失われたピクセルの垂直線があるように見えます。デモプログラムと同じようにバッファを使用します。なぜ私は奇妙な写真を撮るのですか?

Edit2:わかりました。ループ内でiとjを交換する必要があります。

4

1 に答える 1

3

以前の回答で投稿したように、これはnumpyを使用して行われ、デモにはRawBitmapAccessという例があります。コードは基本的に次のようになります。

def MakeBitmap2(self, red, green, blue, alpha=128):
    # Make an array of bytes that is DIM*DIM in size, with enough
    # slots for each pixel to have a RGB and A value
    #arr = makeByteArray( (DIM,DIM, 4) )
    arr = numpy.empty((DIM,DIM, 4), numpy.uint8)

    # just some indexes to keep track of which byte is which
    R, G, B, A = range(4)

    # initialize all pixel values to the values passed in
    arr[:,:,R] = red
    arr[:,:,G] = green
    arr[:,:,B] = blue
    arr[:,:,A] = alpha

    # Set the alpha for the border pixels to be fully opaque
    arr[0,     0:DIM, A] = wx.ALPHA_OPAQUE  # first row
    arr[DIM-1, 0:DIM, A] = wx.ALPHA_OPAQUE  # last row
    arr[0:DIM, 0,     A] = wx.ALPHA_OPAQUE  # first col
    arr[0:DIM, DIM-1, A] = wx.ALPHA_OPAQUE  # last col

    # finally, use the array to create a bitmap
    bmp = wx.BitmapFromBufferRGBA(DIM, DIM, arr)
    return bmp
于 2012-04-16T01:03:25.807 に答える