Разбить изображение на плитки - PullRequest
8 голосов
/ 19 мая 2011

Эй.У меня есть изображение размером 480 x 800, и я хотел бы разместить его на моем тайлекарте.Я пытаюсь разделить изображение на сетку (6 х 10) и назначить каждой плитке определенную часть изображения.По сути, карта тайлов будет выглядеть как одно большое изображение, так как к каждой плитке прикреплена соответствующая часть изображения.Какой лучший способ сделать это?Я попытался просмотреть каждую плитку и нарисовать ее на WriteableBitmap, но все изображения одинаковы.

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) - это просто индексы, используемые при итерации карты тайла,это высота и ширина плитки, а mainWb - это большое изображение, которое я хочу разделить.Спасибо за любую помощь.

edit: Код полного цикла:

    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 с элементом управления Image, называемым img.Вышеуказанный метод SetImage таков:

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

1 Ответ

4 голосов
/ 19 мая 2011

Вы можете сделать это с хорошим трюком - просто обрезайте изображение каждый раз, используя холст, и перемещайте изображение таким образом, чтобы каждый раз показывался другой фрагмент:

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