私は形状(M×N×3)とデータ型がfloat32
の巨大なnumpy ndarrayを持っています。 wx.ScrolledWindow
が添付された画像をwx.Frame
に表示するだけです。私は100%ズームで画像を望んでおり、データ損失が発生しないことが非常に重要です。これらは超高解像度のX線画像で、浮動小数点値として使用する必要があります。matplotlibでnumpl配列をwx内に表示
これまでのところ、wx.Image
の機能は、8ビット整数のndarrayしか受け入れないため、機能しませんでした。いいえ。
PILイメージングライブラリでは8ビットしか処理できませんが、十分ではありません。
これまでのところ、私が十分であることがわかった唯一のライブラリはmatplotlibですが、私が望むようにmatplotlibを表示するのに問題があります。
class View(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,
parent=None,
title="DICOM Viewer",
size=(1280, 750),
pos=(0,0))
self.scroll = wx.ScrolledWindow(self, -1)
self.figure = plt.Figure()
self.canvas = FigureCanvasWxAgg(self.scroll, -1, self.figure)
self.axes = Axes(self.figure, [0,1,0,1])
self.figure.figimage(ndarray)
self.sizer.Add(self.canvas, 1, wx.EXPAND)
self.scroll.SetSizer(self.sizer)
figimage機能は、私が欲しいものである生のピクセルが、何も表示されませんが、それは唯一のwxFrameの表示可能領域に埋め、スーパースローである:これは近い私を取得します。たぶんwxウィジェットの問題?
より良い解決策のような関数imshowを使用していた:内部に収まるように画像を
class View(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,
parent=None,
title="DICOM Viewer",
size=(1280, 750),
pos=(0,0))
self.scroll = wx.ScrolledWindow(self, -1)
self.figure = plt.Figure()
self.canvas = FigureCanvasWxAgg(self.scroll, -1, self.figure)
self.axes = Axes(self.figure, [0,1,0,1])
self.axes = self.figure.add_subplot(111)
self.axes.imshow(ndarray)
self.sizer.Add(self.canvas, 1, wx.EXPAND)
self.scroll.SetSizer(self.sizer)
しかし、これは不必要な軸やラベル、私のプロットの周りのパディングの多くを与え、それオートスケール可視領域。ピクセルの品質はまだそこにありますが、mplツールバーを追加して手作業でパンニングする必要があります。パンを長すぎるとイメージが失われる可能性があります。