我正在創建一個程序,該程序必須更改pyglet窗口中各個像素的顏色。我無法找到任何方式在文檔中執行此操作。有沒有辦法做到這一點?如何更改pyglet窗口的顏色
回答
對於funsies,我會添加另一個答案,更符合你可能需要的線。由於窗口本身將是你決定什麼「清晰」顏色緩衝區通過:
window = pyglet.window.Window(width=width, height=height)
pyglet.gl.glClearColor(0.5,0,0,1) # Note that these are values 0.0 - 1.0 and not (0-255).
因此改變背景幾乎是不可能的,因爲它是「無」。
但是,您可以通過.draw()
函數在背景上繪製像素。
import pyglet
from random import randint
width, height = 500, 500
window = pyglet.window.Window(width=width, height=height)
@window.event
def on_draw():
window.clear()
for i in range(10):
x = randint(0,width)
y = randint(0,height)
pyglet.graphics.draw(1, pyglet.gl.GL_POINTS,
('v2i', (x, y)),
('c3B', (255, 255, 255))
)
pyglet.app.run()
這將在背景上創建10個隨機放置的白點。
要添加上面的任何內容,只需在pyglet.graphics.draw()
行之後放置您的.blit()
或.draw()
功能即可。
你可以將像素分成背景'圖像'。你可以看看this堆棧溢出問題。
您可以使用魔術功能SolidColorImagePattern
並修改您需要的數據。
R,G,B,A = 255,255,255,255
pyglet.image.SolidColorImagePattern((R,G,B,A).create_image(width,height)
這是一個.blit()
:圖像。它是白色的,可能不是你想要的。
所以我們會做一些更多的巫術和換出隨機以外的所有像素(螞蟻的戰爭):
import pyglet
from random import randint
width, height = 500, 500
window = pyglet.window.Window(width=width, height=height)
image = pyglet.image.SolidColorImagePattern((255,255,255,255)).create_image(width, height)
data = image.get_image_data().get_data('RGB', width*3)
new_image = b''
for i in range(0, len(data), 3):
pixel = bytes([randint(0,255)]) + bytes([randint(0,255)]) + bytes([randint(0,255)])
new_image += pixel
image.set_data('RGB', width*3, new_image)
@window.event
def on_draw():
window.clear()
image.blit(0, 0)
pyglet.app.run()
教育目的,我將它分解爲更簡單的塊。
image = pyglet.image.SolidColorImagePattern((255,255,255,255)).create_image(width, height)
如前所述,創建一個純白色圖像。它的寬度和高度與窗口大小相匹配。
我們再搶的圖像數據:
data = image.get_image_data().get_data('RGB', width*3)
這bytes
字符串將包含width*height*<format>
,這意味着20x20
圖像將1200
字節大,因爲RGB佔用每個像素3個字節。
new_image = b''
for i in range(0, len(data), 3):
pixel = bytes([randint(0,255)]) + bytes([randint(0,255)]) + bytes([randint(0,255)])
new_image += pixel
這整個塊遍歷所有像素(LEN(數據)只是一個方便的事情,你可以做range(0, width*height*3, 3)
爲好,但咩。
3 randint的像素contists(255)字節的目標相結合成一個字符串,像這樣:。
pixel = b'xffxffxff'
這也是爲什麼我們在range(0, len(data), 3)
步驟3
的原因,因爲一個像素是3個字節「寬」
一旦我們發電機密封編輯所有的像素(由於某種原因,字節對象image
不能被修改..我可以發誓我已經修改字節「字符串」之前..我厭倦壽,所以這可能是一個烏托邦夢或什麼。
總之,一旦所有的甜美形象建設完成後,我們給圖像對象是新的數據做:
image.set_data('RGB', width*3, new_image)
就是這樣。在-45度冬季的日子裏,您可以在陽光下輕鬆享用黃油。
文檔:
- https://pyglet.readthedocs.io/en/pyglet-1.2-maintenance/programming_guide/quickstart.html
- https://github.com/Torxed/PygletGui/blob/master/gui_classes_generic.py
- https://pythonhosted.org/pyglet/api/pyglet.image.ImageData-class.html#get_image_data
- https://pythonhosted.org/pyglet/api/pyglet.image.ImageData-class.html#set_data
您也可以選擇在獲得區域,只是修改一個區域..但我會留下修補給你:)
- 1. 如何更改窗口的顏色
- 2. 更改Eclipse窗口顏色
- 3. 更改窗口的顏色7
- 4. 更改UWP窗口邊框顏色?
- 5. 更改窗口標題顏色
- 6. 更改Windows 7窗口顏色
- 7. 更改窗口背景顏色
- 8. 如何更改任何窗口的邊框顏色?
- 9. 如何更改日食中的彈出窗口的顏色
- 10. Wxpython如何更改窗口中Gauge進度條的顏色
- 11. 如何更改單聲道(GTK)中的窗口背景顏色?
- 12. 在VIM中,如何更改QuickFix窗口的backbround顏色?
- 13. 如何在shell窗口中更改構建輸出的顏色?
- 14. 如何更改byobu中的「活動窗口」顏色
- 15. Python:Tkinter:如何更改窗口邊框的顏色?
- 16. 如何更改Leaflet彈出窗口的背景顏色?
- 17. 如何更改Resharper預覽窗口中使用的顏色?
- 18. 如何更改窗口的顏色(緩衝區策略問題)
- 19. 如何更改Android Studio中工具窗口的背景顏色?
- 20. 如何根據工作空間更改eclipse窗口的顏色?
- 21. MetroFramework:更改窗體顏色
- 22. oracle窗體以編程方式更改窗口背景顏色?
- 23. 如何獲得窗口的顏色
- 24. 窗口背景顏色:顯示比指定的顏色更深?
- 25. SDL窗口不會改變顏色(C++)
- 26. 如何更改光標顏色而不更改文字顏色?
- 27. 如何更改sbt顏色?
- 28. 如何更改ActionBar顏色
- 29. 如何更改createCircularReveal()顏色?
- 30. 如何更改layer.border.top顏色?