2017-02-26 13 views
0

pygletウィンドウ内の個々のピクセルの色を変更する必要があるプログラムを作成しています。私はドキュメントでこれを行う方法を見つけることができません。これを行う方法はありますか?pygletウィンドウの色を変更する方法

答えて

0

私はあなたが必要とするかもしれない行に沿っている別の答えを追加します。それは「何も」ませんので

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個の白い点が作成されます。
上記の内容を追加するには、.blit()または.draw()フィーチャーをpyglet.graphics.draw()行の後に配置するだけです。

0

ピクセルを背景の「画像」にブリットすることができます。あなたはthis Stack Overflowの質問を見ることができます。

0

マジック機能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文字列は、RGBのピクセルあたり3つのバイトを占めているため20x20画像が1200バイトビッグになる意味、width*height*<format>が含まれています。

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(255)のピクセルcontistsは、結合オブジェクトをバイト。。

1つの画素は3バイトの「ワイド」であるため、また、我々は我々の range(0, len(data), 3)3ステップ理由理由だ
pixel = b'xffxffxff' 

私たちがしたらgenerat:そうのような1つの文字列に何らかの理由でバイトオブジェクトimageを変更することはできません。私は以前にバイト "文字列"を変更したことを誓うことができました。私は疲れているので、おそらくユートピアの夢なのです。

image.set_data('RGB', width*3, new_image) 

そして、それはそれだが:
はとにかく、一度すべてが甘いイメージ構築が行われ、我々はそれが実行して、新しいデータのイメージオブジェクトを与えます。 -45度の冬の日に日差しのバターとして簡単。

ドキュメント:

ます。また、地域を取得するためにオプトインし、ちょうど地域を変更することができます。..しかし、私はあなたに微妙な変更を残しておきます:)

関連する問題