2016-03-29 17 views
0

Birden çok görüntüyü birbirine dikmek için basit bir program yapıyorum. Söz konusu görüntülerin bazıları oldukça büyük. Ancak, çalışmak için aşağıdaki kodu alınamıyor:Resimler karıştırılmıyor

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] 

Teoride, following kod images listeden yüklü görüntüleri almalı ve önceden belirlenmiş genişlik ve yükseklik bir çıkış yüzeyine onları blit (hesaplanan dayalı Birleştirilmiş yükseklikler ve maksimum görüntüler ile). Ancak durum böyle değil. Program çıkışında görebileceğiniz gibi

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)> 

, ilk (çok büyük) görüntü gayet blits, ancak diğer görüntüleri yok.

Bunun neden olduğunu anlayamıyorum. Bu komut dosyasının tam kodu here'dur. Herhangi bir yardım çok takdir edilecektir.

+0

Belki de sebebi, ilk önce genişliğinizin/yüksekliğinin 0 olmasıyla ortaya çıkan etkilerdir. Bu, görmeyi imkansız kılar. Bu rektlere genişlik ve yükseklik eklemeye çalışın. Bu bana bir cevap verebilmem için bana bir cevap gönderebilseydim, fakat test etmedim, emin olmadığım takdirde cevap vermek istemiyorum! –

cevap

1

Gönderdiğiniz kod, bağlantınızdakilerden farklıdır, ancak testlerimde sorunsuz çalışır.

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 

Belki gerçek kodda yükseklik hesaplama biraz kapalı:

böyle bir şey biraz daha bunu basitleştirmek olur? blit boş bir Rect döndürürse, Surface hedefine hiçbir şey çizilemeyeceği anlamına gelir. Sorunun

+0

Tüm bunlar küçük resimlerle iyi çalışır, ancak çok büyük bir görüntüyü (256x44096) ilk kez karıştırdığımda, diğer küçük görüntüler karışmaz. Yükseklik hesaplamaları gayet iyi - Ben sadece doğru boyuttaki yüzeyleri dikdörtgenin çizimini test ettik ve hepsi doğru yerdeydiler. Ancak basitleştirilmiş kod için teşekkür ederiz (bağlantının aşağısındaki ekstra kod, kullanıcı ne olup bittiğini bilir). – Inazuma

+1

Belki de makinenizdeki SDL'nin ne yapabileceğine dair bir sınır vurdunuz: -/belki PIL'i denemelisiniz, o zaman ... – sloth

-2

Bölüm şudur:

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

Hep x = 0 görüntüleri blitting edilmektedir. Genişlik ne kadar geniş?

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

ve blitting zaman sonra bunları kullanmak: Sen böyle bir şey yapmak gerekir. Daha sonra bunları genişlikle karşılaştırın. Ayrıca, bu kod çalışır (tüm döngü), çünkü birkaç büyük resim ekledikten sonra, genişlik değişkeni büyük olacaktır, bu yüzden diğer görüntüler çok geniş olmadıkça, nasıl çalışacağını göremiyorum : if i.get_rect().size[0] > width:

İlgili konular