在网格中平铺图像

本文关键字:图像 网格 | 更新日期: 2023-09-27 18:02:30

我如何在Grid容器中多次平贴单个图像(小尺寸),使Grid看起来是持有单个图像而不是多个图像平贴在一起?

我曾见过一些方法,通过位元化多次复制较小的图像来创建单个图像,但这个过程在计算上很昂贵。我不想创造一个更大的形象;我只是想多次使用相同的单个映像,以便进程不需要CPU周期。

如何做到这一点?

UPDATE:似乎没有简单的方法可以做到以上。因此,作为一种解决方案,我如何通过在WP8.1 RT中拼接多个较小的图像来创建单个较大的图像?

在网格中平铺图像

在这段代码中,我只实例化了一个位图图像。不过,我不确定,如果它是内存节省。

{
      int n = 5;
      Grid grid = new Grid();
      BitmapImage bitmapImage = new BitmapImage(new Uri("pack://application:,,,/StackOverflowTest;Component/1.jpg"));
      for (int i = 0; i < n; i++)
      {
          grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
          grid.RowDefinitions.Add(new RowDefinition {Height= GridLength.Auto});
      }
      for (int i = 0; i < n; i++)
      {
          for (int j = 0; j < n; j++)
          {                
              Image image = new Image { Source = bitmapImage };
              Grid.SetRow(image, i);
              Grid.SetColumn(image, j);
              grid.Children.Add(image);
          }
      }
      containerOfGrid.Children.Add(grid);
}

编辑:

我已经检查过了,在我看来,在立即窗口中,源映像没有被分配多次。

((System.Windows.Controls.Image)((new System.Linq.SystemCore_EnumerableDebugView(((System.Windows.Controls.Panel)(grid)).Children)).Items[0]))._bitmapSource.GetHashCode()
37855919
((System.Windows.Controls.Image)((new System.Linq.SystemCore_EnumerableDebugView(((System.Windows.Controls.Panel)(grid)).Children)).Items[1]))._bitmapSource.GetHashCode()
37855919
((System.Windows.Controls.Image)((new System.Linq.SystemCore_EnumerableDebugView(((System.Windows.Controls.Panel)(grid)).Children)).Items[0])).GetHashCode()
19914648
((System.Windows.Controls.Image)((new System.Linq.SystemCore_EnumerableDebugView(((System.Windows.Controls.Panel)(grid)).Children)).Items[1])).GetHashCode()
3378500