9

PILを使用して、画面の一部を遠近法で変換しています。元の画像データはpygameSurfaceであり、PIL画像に変換する必要があります。

そのため、その目的のために存在するpygameのtostring-functionを見つけました。

ただし、結果はかなり奇妙に見えます(添付のスクリーンショットを参照)。このコードの何が問題になっていますか:

rImage = pygame.Surface((1024,768))

#draw something to the Surface
sprite = pygame.sprite.RenderPlain((playboard,))
sprite.draw(rImage)

pil_string_image = pygame.image.tostring(rImage, "RGBA",False)
pil_image = Image.fromstring("RGBA",(660,660),pil_string_image)

私は何が間違っているのですか?

pygameサーフェスからpil画像への変換

4

1 に答える 1

8

コメントで述べたように、のpygameのドキュメントpygame.image.fromstring(string, size, format, flipped=False)は、「サイズとフォーマットの画像は、渡された文字列バッファとまったく同じサイズを計算する必要があります。そうしないと、例外が発生します。」したがって、(660,660)の代わりに(1024,768)を使用するか、またはその逆を使用すると、一般に、2つの呼び出しで同じディメンションが機能する可能性が高くなります。(ケースをテストしなかったため、「機能する」ではなく「機能する可能性が高い」と言います。)

このような問題が疑われる理由:画像の一部の奇妙な外観は、同期できないラスターレートに設定されている表示画面に似ています。つまり、画像の線は左マージン以外のポイントで表示を開始します。この場合、画像の行の長さが表示の行の長さよりも長いためです。雪片は、歪んだ画像とは別に生成されたスプライトだと思います。

于 2013-01-06T00:17:00.613 に答える