2011-05-19 11 views
8

अरे। मेरे पास 480 x 800 छवि है और इसे मेरे टाइलमैप पर रखना चाहूंगा। मैं छवि को ग्रिड (6 x 10) में विभाजित करने की कोशिश कर रहा हूं और छवि के विशिष्ट भाग को प्रत्येक टाइल असाइन कर रहा हूं। अनिवार्य रूप से, टाइलमैप एक बड़ी छवि की तरह दिखेगा क्योंकि प्रत्येक टाइल में संलग्न छवि का प्रासंगिक हिस्सा होता है। ऐसा करने का सबसे अच्छा तरीका क्या है? मैंने प्रत्येक टाइल के माध्यम से जाने और इसे लिखने योग्य बिटमैप पर खींचने का प्रयास किया है, लेकिन सभी छवियां समान हैं।टाइल्स में छवि को तोड़ें

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 और y) बस जब tilemap के माध्यम से पुनरावृत्ति इस्तेमाल किया अनुक्रमित कर रहे हैं, 80 टाइल ऊंचाई और चौड़ाई है और mainWb बड़ी छवि मैं विभाजित करना चाहते है। किसी भी मदद के लिए धन्यवाद।

संपादित करें: पूर्ण लूप कोड:

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 वर्ग एक छवि नियंत्रण के साथ एक सरल 80x80 कैनवास img कहा जाता है। SetImage विधि ऊपर यह है:

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

वह कोड सही लगता है। क्या आप पूरे लूप पोस्ट कर सकते हैं? –

+0

@ ओलिवियर पायन - मैंने पूर्ण लूप जोड़ा है। – Skoder

उत्तर

4

आप एक अच्छे चाल के साथ यह कर सकते हैं - बस छवि हर बार एक कैनवास क्रॉप कर, और छवि के लिए कदम तो हर बार एक और टुकड़ा दिखा रहा है:

 <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

मैंने मूल प्रश्न में कुछ और कोड जोड़ा है। क्या मुझे लूप में कोड के पीछे ऐसा करना चाहिए और 'कैनवास' पैरामीटर को स्वीकार करने के लिए 'SetImage' विधि को संशोधित करना चाहिए? – Skoder

+0

आप या तो मुझे सुझाव दे सकते हैं, लेकिन सबसे सुरुचिपूर्ण यह डेटाबेसिंग के साथ करना है। उपरोक्त कैनवास को किसी आइटम के अंदर रखें कंट्रोल.डाटा टेम्पलेट, और इसे बाध्य करें जिसमें ऑब्जेक्ट्स की एक सूची है जिसमें प्रासंगिक निर्देशांक शामिल हैं। वह सूची पीछे कोड में बनाई जानी चाहिए। –

संबंधित मुद्दे