여기에 문제가 있습니다. 특정 벡터 필드를 비트 맵으로 시각화하고 싶습니다. 표현 자체는 괜찮아요. 그래서 저는 이미 [255,255,115]와 같은 RGB리스트의 매트릭스를 가지고 있습니다. 그러나 그것을 스크린에 그리는 방법에 대해서는 잘 모르겠습니다. 지금까지 수천 개의 컬러 1px 사각형을 만들었지 만 너무 느립니다. 나는 비트 맵을 그리는 더 좋은 방법이있을 것이라고 확신한다.Tk 만 사용하여 파이썬에서 비트 맵을 빨리 그리는 방법은 무엇입니까?
4
A
답변
12
ATTEMPT 3 - 나는 마지막 하나를 맹세 ...
나는이이 작업을 수행 할 수있는 가장 빠른 순수 TK의 방법입니다 생각합니다. 목록 목록에서 10,000 개의 RGB 값을 생성하고 Tkinter.PhotoImage를 만든 다음 픽셀 값을 그 안에 넣습니다.
import Tkinter, random
class App:
def __init__(self, t):
self.i = Tkinter.PhotoImage(width=100,height=100)
colors = [[random.randint(0,255) for i in range(0,3)] for j in range(0,10000)]
row = 0; col = 0
for color in colors:
self.i.put('#%02x%02x%02x' % tuple(color),(row,col))
col += 1
if col == 100:
row +=1; col = 0
c = Tkinter.Canvas(t, width=100, height=100); c.pack()
c.create_image(0, 0, image = self.i, anchor=Tkinter.NW)
t = Tkinter.Tk()
a = App(t)
t.mainloop()
ATTEMPT 1 - 내가 테스트로이 쓴 create_rectangle 방법
를 사용하여. -
내가 아는 PIL를 사용
from Tkinter import *
import random
def RGBs(num):
# random list of list RGBs
return [[random.randint(0,255) for i in range(0,3)] for j in range(0,num)]
def rgb2Hex(rgb_tuple):
return '#%02x%02x%02x' % tuple(rgb_tuple)
def drawGrid(w,colors):
col = 0; row = 0
colors = [rgb2Hex(color) for color in colors]
for color in colors:
w.create_rectangle(col, row, col+1, row+1, fill=color, outline=color)
col+=1
if col == 100:
row += 1; col = 0
root = Tk()
w = Canvas(root)
w.grid()
colors = RGBs(5000)
drawGrid(w,colors)
root.mainloop()
ATTEMPT 2 : 2.67 GHz의 인텔 코어 2 듀오, 그것은 내 임의의 RGB 값을 생성 할 수있는 시간을 포함하여 0.6 초에 약 5000 픽셀을 그릴 수 있습니다 당신은 TK 만 말했지만 PIL은 이것을 정말로 쉽고 빠릅니다.
def rgb2Hex(rgb_tuple):
return '#%02x%02x%02x' % tuple(rgb_tuple)
num = 10000 #10,000 pixels in 100,100 image
colors = [[random.randint(0,255) for i in range(0,3)] for j in range(0,num)]
colors = [rgb2Hex(color) for color in colors]
im = Image.fromstring('RGB',(100,100),"".join(colors))
tkpi = ImageTk.PhotoImage(im)
## add to a label or whatever...
label_image = Tkinter.Label(root, image=tkpi)
4
빠른 순수 Tkinter의 방법이 있습니다 :
import Tkinter, random
import random
class App:
def __init__(self, t):
self.width = 320
self.height = 200
self.i = Tkinter.PhotoImage(width=self.width,height=self.height)
rgb_colors = ([random.randint(0,255) for i in range(0,3)] for j in range(0,self.width*self.height))
pixels=" ".join(("{"+" ".join(('#%02x%02x%02x' %
tuple(next(rgb_colors)) for i in range(self.width)))+"}" for j in range(self.height)))
self.i.put(pixels,(0,0,self.width-1,self.height-1))
c = Tkinter.Canvas(t, width=self.width, height=self.height); c.pack()
c.create_image(0, 0, image = self.i, anchor=Tkinter.NW)
t = Tkinter.Tk()
a = App(t)
t.mainloop()
당신은 넣어 사용할 수 있습니다()이 경우, 전체 이미지를 일부 컬러 데이터 (문자열)와 사각형을 그립니다. 이렇게하면 꽤 비싼 루프가 필요하지 않습니다.
관련 문제
- 1. 비트 맵을 그리는 가장 빠른 방법은 무엇입니까?
- 2. 50 % 불투명도의 비트 맵을 그리는 방법은 무엇입니까?
- 3. Scala로 비트 맵을 그리는 방법은 무엇입니까?
- 4. GDI +를 사용하여 ARGB 비트 맵을 그리는 방법은 무엇입니까?
- 5. 읽을 수있는 작은 텍스트를 빨리 그리는 방법
- 6. 비트 맵을 정리하는 방법은 무엇입니까?
- 7. 비트 맵을 스크롤하는 방법은 무엇입니까?
- 8. 화면에 하이트 맵을 그리는 방법은 무엇입니까?
- 9. 콘솔에 게임 맵을 그리는 방법은 무엇입니까?
- 10. Android : 다른 비트 맵에 비트 맵을 그리는 방법
- 11. 비트 맵을 원근감으로 페인트하는 방법은 무엇입니까?
- 12. ** 빨리 ** ** 파이썬에서
- 13. 글꼴에 적합한 비트 맵을 생성하는 방법은 무엇입니까?
- 14. 비트 맵을 회전하면 모서리가 자르지 만
- 15. RGB에서 48bpp 비트 맵을 초기화하는 방법은 무엇입니까?
- 16. 처음 비트 맵을 넣고 캐시에서로드하는 방법은 무엇입니까?
- 17. Silverlight에서 일련의 계산 된 비트 맵을 가능한 빨리 렌더링하는 방법?
- 18. AS3에서 MovieClip에 비트 맵을 연결하는 방법은 무엇입니까?
- 19. 안드로이드의 맵보기에 비트 맵을 오버레이하는 방법은 무엇입니까?
- 20. WPF에서 비트 맵을 처리하는 방법은 무엇입니까?
- 21. actionscript3 : 비트 맵을 부드럽게하는 방법은 무엇입니까?
- 22. 비트 맵을 첨부하여 작업을 시작하는 방법은 무엇입니까?
- 23. Monodroid 비트 맵을 사용하여 스트림
- 24. 비트 맵을 생성하고 그립니다.
- 25. Objective C를 사용하여 비트 맵을 그리고 화면에 블릿하는 방법은 무엇입니까?
- 26. BITMAPV5HEADER 헤더를 사용하여 비트 맵을 만드는 방법은 무엇입니까?
- 27. Visual C++를 사용하여 RGB 비트 맵을 만드는 방법은 무엇입니까?
- 28. GDI를 사용하여 즉석에서 알파 채널로 비트 맵을 만드는 방법은 무엇입니까?
- 29. 성능 저하없이 안드로이드 게임에서 화면에 비트 맵을 많이 그리는 방법
- 30. 비트 맵 효과가있는 WPF 요소에서 비트 맵을 렌더링하는 방법은 무엇입니까?
시도 3은 대폭 빨라질 수 있습니다. 일반적으로 픽셀 배열을 구성하고 모든 단일 픽셀에 대해 "넣기"를 수행하는 대신 단일 "배치"를 수행하는 것이 훨씬 빠릅니다. –