2017-07-29 9 views
0

と32ビットの符号なし整数の画像Iが32ビット整数の2D numpyの配列を持っている場合、(各8ビット)は、表示各ピクセルのRGBA値を参照TkinterのとPython 3

const Colour *colours = getColourArray(); 
Uint32 *pixels = getPixelBuffer(); 
for(size_t i = 0; i < WIDTH * HEIGHT; i++) { 
    pixels[i] = (Uint32)(colour[i].r() << 24 | colour[i].g() << 16 | colour[i].b() << 8 | 255); 
} 
++ので、Cのように生成されました

SDLでは、上記のpixelsバッファを使用してテクスチャを更新することができます(ここでのColorは単純なRGB構造体です)。

このようなテクスチャをTkinterとPython3でどのように表示できますか?

編集:VTKレンダラをTkinterのウィンドウまたはフレームに埋め込むことができる場合は、VTK8にアクセスできます。

+0

使用Tkinterのキャンバスの描画ピクセルのピクセルによって、または画像を生成します(ここではどのモジュールを使うのかはわかりませんが、1つの画像しか生成せずにキャッシュしておきたい場合を除きます) –

答えて

0

ステップ1:画素変換を行うことができます機能します

def convert(pixel): 
    '''convert 32-bit integer to 4 8-bit integers''' 
    return list(int(pixel).to_bytes(4, 'big')) 

ステップ2:あなたの2D配列は、3次元配列に変換(私はあなたが「データ」を持っている配列の名前と仮定します) 。

import numpy as np 
new = np.empty((data.size, 4)) 
old_shape = data.shape 
data.shape = -1, # reshape into a 1D array 

for i in range(data.size): 
    new[i] = convert(data[i]) 

new.shape = old_shape + (-1,) # reshape into 3D 

ステップ3:numpyアレイをイメージにロードします。

from PIL import Image 
img = Image.fromarray(new, mode='RGBA') 

ステップ4a:イメージを表示または保存する場合は、PILを使用してください。 tkinterは必要ありません。

img.show() # display in your default image viewer 
img.save('data.png') # save to disk 

ステップ4b:あなたはTkinterのにロードする必要がないなら、あなたはラベルウィジェットにロードするためにImageTk.PhotoImageを使用することができます。

from PIL import ImageTk 
import tkinter as tk 

lbl = tk.Label() 
lbl.pimg = ImageTk.PhotoImage(img) 
lbl.config(image=lbl.pimg) 
lbl.pack() 
+0

ありがとうございます。 Cythonでは、これはかなり実行可能です。 –

関連する問題