1

次のコードの結果として生じるストライピングの動作を本当に理解していません。ビットマップの上半分を白で、下半分を黒で表示したかったのです。ここで根本的なことを誤解したのではないかと思います。ありがたいことにどんな助けも受けました。

import numpy
import wx

class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
    wx.Frame.__init__(self, parent, id, title, size = (135,655))

    width = 128
    height = 640
    color = (255,255,255)

    array = numpy.zeros((width,height,3),'uint8')
    array[:,:,] = color
    print array[10,10,0]
    array[0:128,0:320,0:3] = 0
    print array[10,10,0]
    image = wx.EmptyImage(width,height)
    image.SetData(array.tostring())
    self.bitmap = image.ConvertToBitmap()
    wx.EVT_PAINT(self, self.OnPaint)

    self.Centre()

def OnPaint(self, event):
    dc = wx.PaintDC(self)
    dc.DrawBitmap(self.bitmap,3,10)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, '2DS')
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop()
4

1 に答える 1

1

numpy配列を初期化numpy.zeros((height,width,3),'uint8')し、配列(高さ、幅)をスライスすると、array[0:320,0:128,0:3]期待どおりの結果が得られるはずです。

この例の場合、128行下にあり、640列です(基本的に、配列の幅は640、高さは128です)。ビットマップの幅が128であるため、幅640は5行(640/128)に折り返され、画像の左側を黒、右側を白にしましたが、線が折り返されているため、ゼブラ効果が得られました。

于 2012-06-11T11:49:42.627 に答える