有8个不同的大图像,并希望将相应的位置映射到许多没有重叠的多边形

本文关键字:位置 映射 重叠 许多没 多边形 希望 8个 图像 | 更新日期: 2023-09-27 18:20:26

我有8个大小相同的大图像文件。比方说5000乘5000像素。我正在生成许多多边形(基本上是一张地图),这些多边形将填充5000乘5000的区域。这些多边形都不会重叠。

我继承了Polygon类,代码看起来像:

public enum eMap
{
    Map1,
    Map2,
    Map3,
    Map4,
    Map5,
    Map6,
    Map7,
    Map8,
}
public class mPolygon : Polygon
{
    public eMap CurrentMap
    {
        get { return (Boolean)this.GetValue(CurrentMapProperty); }
        set { this.SetValue(CurrentMapProperty, value); }
    }
    public static readonly DependencyProperty CurrentMapProperty = 
       DependencyProperty.Register(
         "State", typeof(MapEnum), typeof(mPolygon), new PropertyMetadata(false));
    public static ImageBrush Map2 = new BitmapImage(
       new Uri("G:''code''Maps''map2.jpg", UriKind.Relative)));
    public static ImageBrush Map3 = new BitmapImage(
       new Uri("G:''code''Maps''map3.jpg", UriKind.Relative)));
    public static ImageBrush Map4 = new BitmapImage(
       new Uri("G:''code''Maps''map4.jpg", UriKind.Relative)));
    public static ImageBrush Map1 = new BitmapImage(
       new Uri("G:''code''Maps''map1.jpg", UriKind.Relative)));
    public static ImageBrush Map5 = new BitmapImage(
       new Uri("G:''code''Maps''map5.jpg", UriKind.Relative)));
    public static ImageBrush Map6 = new BitmapImage(
       new Uri("G:''code''Maps''map6.jpg", UriKind.Relative)));
    public static ImageBrush Map7 = new BitmapImage(
       new Uri("G:''code''Maps''map7.jpg", UriKind.Relative)));
    public static ImageBrush Map8 = new BitmapImage(
       new Uri("G:''code''Maps''map8.jpg", UriKind.Relative)));
    public static ImageBrush Map1 = new BitmapImage(
       new Uri("G:''code''Maps''map1.jpg", UriKind.Relative)));
}

如何从多边形所指向的图像填充多边形的相应背景(填充)。

换句话说,如果我有一个点为(x,y)=(12,25),(45,59),(98,65)和(101,70)的多边形,并且该多边形的CurrentMap==eMap.Map4,那么我想从第四个图像文件中取相同的多边形形状,并将其显示在我的多边形中。我需要对所有的多边形都这样做,如果CurrentMap将多边形更改为不同的图像,那么我也需要显示这种更改。

只是另一种解释方式:

我把地图图像一层一层地放在一起(它们的大小都一样)。所以我有8个地图层,一个在另一个上面。然后我把一层多边形放在所有这些图像的上面。多边形的放置方式使它们不会相互重叠,但它们确实覆盖了贴图所占据的整个空间。因此,一个特定的多边形可能在x1,y1上(并且是一些奇怪的形状),它将使用map5,它将显示一块与该多边形大小和位置相同的map5。我刚才提到的多边形旁边的多边形可能使用map2,它只会显示map2的区域,即它在自己内部。我希望这能更好地解释它。

有8个不同的大图像,并希望将相应的位置映射到许多没有重叠的多边形

您应该注册State的值更改,并相应地更改背景:

public static readonly DependencyProperty CurrentMapProperty = 
   DependencyProperty.Register(
     "State", typeof(eMap), typeof(mPolygon), new PropertyMetadata((eMap)(-1), OnStateChanged));
private static readonly IDictionary<eMap, ImageBrush> mapping = new Dictionary<eMap, ImageBrush>
{
    { eMap.Map1, Map1 },
    { eMap.Map2, Map2 },
    { eMap.Map3, Map3 }
};
private static void OnStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    mPolygon polygon = (mPolygon)d;
    polygon.Fill = mapping[e.NewValue];
}