Cela semble comme un simple problème de seulement afficher l'image complète de la carte, et la cartographie du curseur de coordonnées lors de son déplacement sur cette image à la coordonnée correspondante de l'image de masque. Vous pourriez faire deux choses ici. Gardez l'image du masque en noir et blanc et disposez d'une carte de chaque zone associée à quelque chose qui définit ce que vous voulez faire lorsque cette zone est survolée. Ou, changez votre masque en une image multicolore, et faites simplement correspondre chaque code couleur à quelque chose qui définit ce que vous voulez faire lorsque cette zone est survolée. Personnellement, je choisirais ce dernier, car il est beaucoup plus simple, et vous auriez environ 16 millions de zones possibles qui pourraient être utilisées (en 24 couleurs).
Etant donné un type de cartographie simple:
class ZoneMap
{
public Color MappedColor { get; set; }
public Action OnHover { get; set; }
}
Vous pourriez regarder la zone cartographiée en traduisant les coordonnées de la souris de l'image source aux coordonnées correspondantes de l'image de carte des zones multi-couleurs, rechercher le ZoneMap entrée par couleur, et invoquer son action OnHover:
var spainZones = new ZoneMap[]
{
new ZoneMap { MappedColor = Color.Red, OnHover = new Action(RedHandler) },
new ZoneMap { MappedColor = Color.Blue, OnHover = new Action(BlueHandler) }
}
var color = getZoneColor(Mouse.X, Mouse.Y); // translate source mouse coords to colored zone map coords and get color
var zone = spainZones.FirstOrDefault(zm => zm.MappedColor == color);
zone.OnHover();
Je sais que c'est très difficile. Si j'avais plus d'informations sur ce que vous voulez faire en stationnaire d'une zone particulière, je pourrais être en mesure de fournir plus.
Ceci est proche de ce que je veux, je pense. L'idée de base est de traiter distinctement les différentes zones (pensez à des pièces de puzzle). Le résultat final est quelque chose comme la façon dont warfish.net fait avec ses cartes de jeu. Je veux présenter l'image originale à l'utilisateur, détecter un clic et faire quelque chose avec tous les pixels adjacents de la même couleur (remplir la zone avec une couleur, par exemple) – Chris
En utilisant des pixels adjacents de la même couleur selon la superposition, je signifier. L'image source originale est uniquement à des fins de présentation - l'intention est que la superposition définisse les zones d'action de l'image. – Chris
@Chris: À droite, seule l'image source d'origine serait affichée. Cependant, tant que votre image source et l'image de la carte de zone ont la même taille, vous pouvez facilement mapper les coordonnées de la souris lorsque vous passez la souris sur l'image source vers l'image de la carte de zone. Une fois que vous avez la couleur de la zone, rechercher l'entrée ZoneMap correcte par couleur et invoquer son action OnHover serait plutôt trivial. – jrista