2011-05-19 9 views
8

Hey. Ben 480 x 800 görüntü var ve bu benim tilemap üzerine yerleştirmek istiyorum. Görüntüyü bir ızgaraya (6 x 10) bölmeye çalışıyorum ve görüntünün belirli bir bölümünü her bir döşemeye atadım. Esasen, her bir döşemenin kendisine bağlı görüntünün ilgili kısmına sahip olması nedeniyle tilemap büyük bir görüntü gibi görünecektir. Bunu yapmanın en iyi yolu nedir? Her bir döşemeden geçmeyi ve onu bir WriteableBitmap'e çizmeyi denedim, ancak tüm görüntüler aynı.Fayanslara görüntüyü kırın

WriteableBitmap wb = new WriteableBitmap(80,80); 
Rect src= new Rect(x*Width,y*Height, 80, 80); 
Rect dest= new Rect(0, 0, 80, 80); 
wb.Blit(dest, mainWb, src); 
tile.SetImage(wb); 

(x ve y) tilemap yineleme kullanılan sadece dizinlerinin 80 karo yükseklik ve genişlik ve mainWb I bölmek isteyen büyük bir görüntüdür. Herhangi bir yardım için teşekkürler.

düzenleme: Tam döngü kodu:

var mainImage = Application.GetResourceStream(new Uri("MainImage.jpg", UriKind.Relative)).Stream; 
        WriteableBitmap mainWb = new WriteableBitmap(480, 800);   

        mainWb.SetSource(mainImage); 
        for (int x = 0; x < 6; x++) 
        { 
         for (int y = 0; y < 12; y++) 
         { 
          Tile tile = new Tile(); 

          WriteableBitmap wb = new WriteableBitmap(80,80); 


Rect src = new Rect(x*Width,y*Height, 80, 80); 

         Rect dest = new Rect(0, 0, 80, 80); 

         wb.Blit(dest, mainWb, src); 
         tile.SetImage(wb);  

         Canvas.SetLeft(tile, x * WIDTH); 
         Canvas.SetTop(tile, y * HEIGHT); 


         LayoutRoot.Children.Add(tile); 
         ls.Add(tile); 
        } 
       } 

Tile sınıf bir resim denetimi ile basit 80x80 tuval img denilen olduğunu. SetImage yöntem yukarıda şudur:

public void SetImage(WriteableBitmap wb) 
     {     
      img.Source = wb;      
     } 
+0

Bu kod doğru görünüyor. Tüm döngüyü gönderir misin? –

+0

@Olivier Payen - Tam döngüyü ekledim. – Skoder

cevap

4

güzel bir hile ile yapabilirsiniz - Başka bir parça gösteriyor her zaman bu yüzden sadece bir tuval kullanarak görüntüsü her zaman kırpmak ve görüntüyü taşıyın:

 <Canvas Width="80" Height="80"> 
      <Canvas.Clip> 
       <RectangleGeometry Rect="0,0,80,80" /> 
      </Canvas.Clip> 
      <Image Source="your_image.png" 
    Canvas.Left="0" Canvas.Top="0" /> 
      <!-- or -80, -160, -240 etc.. --> 
     </Canvas> 
+0

Orijinal soruya daha fazla kod ekledim. Bunu döngüdeki arkasındaki kodda yapmalı ve 'tuval 'parametresini kabul etmek için' SetImage' yöntemini değiştirmeli miyim? – Skoder

+0

ya tavsiye ettiğim gibi yapabilirsin, ama en zarif olanı databinding ile yapmaktır. Yukarıda belirtilen tuvali bir itemsControl.DataTemplate içine koyun ve ilgili koordinatları içeren nesnelerin bir listesini yapın. Bu liste arkasındaki kodda oluşturulmalıdır. –