This would seem like a simple problem of only displaying the full map image, and mapping the cursor coordinate when moved over that image to the corresponding coordinate of the mask image. You could do two things here. Keep the mask image black and white, and have a map of each area associated to something that defines what you want to do when that area is hovered. Or, change your mask to a multi-colored image, and simply map each color code to something that defines what you want to do when that area is hovered. I personally would choose the latter, as it is a lot simpler, and you would have approximately 16 million possible zones that could be used (given 24 bit colors).
Given a simple mapping type:
class ZoneMap
{
public Color MappedColor { get; set; }
public Action OnHover { get; set; }
}
You could look up the mapped zone by translating the mouse coordinates of the source image to the corresponding coordinates of the multi-color zone map image, look up the ZoneMap entry by color, and invoke its OnHover action:
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();
I know this is very rough. If I had more information about what you want to do on hover of a particular zone, I might be able to provide more.