2016-03-29 16 views
0

私は、複数の画像をつなぎ合わせる簡単なプログラムを構築しています。問題の画像はかなり大きいものがあります。しかし、私は仕事に以下のコードを取得することはできません。画像がぼんやりしない

out = py.Surface((width, height), flags=py.SRCALPHA) 

pos = 0 

for i in images: 
    r = out.blit(i, (0, pos)) 
    print(pos, r) 
    pos += i.get_rect().size[1] 

理論的には、follwingコードがimagesリストから読み込んだ画像を取る必要があり、所定の幅と高さの出力表面にそれらをブリット(計算に基づきますイメージの最大高さと最大値のずれ)。しかし、そうではありません。

0 <rect(0, 0, 256, 44096)> 
44096 <rect(0, 0, 0, 0)> 
46112 <rect(0, 0, 0, 0)> 
48128 <rect(0, 0, 0, 0)> 
50144 <rect(0, 0, 0, 0)> 
52160 <rect(0, 0, 0, 0)> 

あなたがプログラムの出力から見ることができるように、最初の(非常に大きな)画像は罰金ブリットが、他の画像にはありません。

なぜこのようなことが起こっているのか分かりません。このスクリプトの完全なコードはhereです。どんな助けでも大歓迎です。

+0

おそらく、あなたの最初の後の矩形は幅/高さが0であるためです。それは見えなくなります。それらの矩形に幅と高さを追加してみてください。これが私に教えてくれたら、私は答えを投稿することができますが、私はそれをテストしていませんので、わからない場合は回答を投稿したくありません! –

答えて

1

あなたの投稿したコードはあなたのリンクのものとは異なりますが、テストでうまくいきます。

私はこのような何かをもう少しそれを簡素化します:

width = max(i.get_rect().width for i in images) 
height = sum(i.get_rect().height for i in images) 

out = py.Surface((width, height), flags=py.SRCALPHA) 

pos = 0 
for i in images: 
    r = out.blit(i, (0, pos)) 
    pos += i.get_rect().height 

たぶん、あなたの実際のコードでの高さの計算は少しオフになっていますか? blitが空のRectを返した場合は、宛先Surfaceに何も描画できないことを意味します。

r = out.blit(i, (0, pos))

あなたはいつものx = 0にイメージをブリッティングされています。問題の

+0

これはすべて小さな画像でうまく動作しますが、最初に非常に大きな画像(256x44096)をblitすると、他の小さな画像はblitされません。高さの計算はうまくいきます - 私は表面上に正しいサイズの四角形を描くだけでテストしましたが、それらはすべて正しい場所にあります。しかし、単純化されたコードをありがとう(リンクの余分なコードは、ユーザーが何が起こっているかを知るためのものです)。 – Inazuma

+1

おそらく、あなたのマシン上のSDLが扱うことのできる限界を突破するかもしれません: - /多分PILに試してみてください。 – sloth

-2

パートはこれです。幅はどれくらいですか?

Xpos = i.get_rect().size[0] Ypos = i.get_rect().size[1]

と、ブリットときにそれらを使用する:あなたのような何かをする必要があります。その後、幅と比較します。また、このコードは複数の大きな画像を追加した後、幅の変数が大きくなるため、他の画像が非常に広い場合を除き、どのように動作するのかわかりません:if i.get_rect().size[0] > width:

関連する問題