using System; using System.Data; using System.Collections; using System.Drawing; using System.Web; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Text; namespace EggHeadCafe.Controls { #region Structs public struct UrlsForImageColor { public string Red; public string Green; public string Blue; public string Url; public string AltTag; public string Target; public string OnMouseOver; } #endregion public class ImageMaps { public ImageMaps() { } #region Get Map public string GetMap(string ImageElementName,string ImageFileName,ArrayList LinksByColor) { string sRet=""; string Coords=""; string CurColor=""; string CompareColor=""; bool fFoundColorInPixel=false; int hplus=0; int Start=0; int End=0; int y=0; int x=0; int u=0; Color pixelColor; StringBuilder sb = new StringBuilder(); EggHeadCafe.Controls.UrlsForImageColor oLink; Bitmap oImage = null; try { ImageFileName = System.Web.HttpContext.Current.Server.MapPath(ImageFileName); oImage = new Bitmap(System.Drawing.Image.FromFile(ImageFileName)); y = oImage.Height; x = oImage.Width; string[,] ImagePixels = new string[y,x]; for(int h = 0; h < y; h++) { for(int w = 0; w < x; w++) { pixelColor = oImage.GetPixel(h,w); ImagePixels[h,w] = pixelColor.R.ToString() + "." + pixelColor.G.ToString() + "." + pixelColor.B.ToString(); } } sb.Append("<img name=\"" + ImageElementName + "\" src=\"" + ImageFileName + "\" width=\"" + x.ToString()); sb.Append("\" height=\"" + y.ToString() + "\" border=\"0\" usemap=\"#m_" + ImageElementName + "2\">" + "\n"); sb.Append("<map name=\"m_" + ImageElementName + "2\">" + "\n"); for(u = 0; u < LinksByColor.Count; u++) { oLink = (EggHeadCafe.Controls.UrlsForImageColor)LinksByColor[u]; CompareColor = oLink.Red + "." + oLink.Green + "." + oLink.Blue; for(int h = 0; h < y; h++) { for(int w = 0; w < x; w++) { if (w==0) { Start = w; } CurColor = ImagePixels[h,w]; if (CurColor != CompareColor) { if (fFoundColorInPixel == true) { Coords = h.ToString() + ","; Coords += Start.ToString() + ","; Coords += hplus.ToString() + ","; Coords += End.ToString(); sb.Append(WriteArea(Coords,oLink)); } Start = w; fFoundColorInPixel = false; continue; } else { fFoundColorInPixel = true; } End = w; hplus = h + 1; } // End FOR width if (fFoundColorInPixel == true) { Coords = h.ToString() + ","; Coords += Start.ToString() + ","; Coords += hplus.ToString() + ","; Coords += End.ToString(); sb.Append(WriteArea(Coords,oLink)); } } } sb.Append("</map>" + "\n"); } catch (Exception err) { throw; } finally { sRet = sb.ToString(); oImage.Dispose(); } return sRet; } #endregion #region Write Area private string WriteArea(string Coords,EggHeadCafe.Controls.UrlsForImageColor oLink) { string sRet=""; sRet = "<area shape=\"rect\" coords=\"" + Coords + "\""; if (oLink.Url.Length > 0) { sRet += " href=\"" + oLink.Url + "\" "; } if (oLink.AltTag.Length > 0) { sRet += " alt=\"" + oLink.AltTag + "\""; } if (oLink.Target.Length > 0) { sRet += " target=\"" + oLink.Target + "\""; } if (oLink.OnMouseOver.Length > 0) { sRet += " onmouseover=\"" + oLink.OnMouseOver + "\""; } sRet += ">\n"; return sRet; } #endregion } }
<%@ Import Namespace="System.Drawing" %> <%@ Import Namespace="System.Drawing.Drawing2D" %> <%@ Import Namespace="System.Drawing.Imaging" %> <%@ Import Namespace="EggHeadCafe.Controls" %> <script Language="C#" runat="server"> protected void Page_Load(object sender, EventArgs e) { EggHeadCafe.Controls.ImageMaps oMap = new EggHeadCafe.Controls.ImageMaps(); ArrayList Links = new ArrayList(); EggHeadCafe.Controls.UrlsForImageColor oLink; try { oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "255"; oLink.Green = "0"; oLink.Blue = "0"; oLink.Url = "http://www.eggheadcafe.com"; oLink.AltTag = "my red region"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; oLinks.Add(oLink); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "0"; oLink.Green = "0"; oLink.Blue = "0"; oLink.Url = "http://www.robbemorris.com"; oLink.AltTag = "my black region"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; Links.Add(oLink); Response.Write(oMap.GetMap("Image1","images/pie.gif",Links)); Links.Clear(); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "0"; oLink.Green = "0"; oLink.Blue = "204"; oLink.Url = "http://www.eggheadcafe.com"; oLink.AltTag = "blue region"; oLink.Target = "_blank"; oLink.OnMouseOver = "alert('over blue region');"; Links.Add(oLink); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "255"; oLink.Green = "0"; oLink.Blue = "255"; oLink.Url = "http://www.asp.net"; oLink.AltTag = "pink region"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; Links.Add(oLink); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "102"; oLink.Green = "0"; oLink.Blue = "153"; oLink.Url = "http://www.yahoo.com"; oLink.AltTag = "purple region"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; Links.Add(oLink); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "204"; oLink.Green = "255"; oLink.Blue = "0"; oLink.Url = "http://www.google.com"; oLink.AltTag = "yellow"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; Links.Add(oLink); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "102"; oLink.Green = "153"; oLink.Blue = "102"; oLink.Url = "http://www.rushlimbaugh.com"; oLink.AltTag = "green region"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; Links.Add(oLink); oLink = new EggHeadCafe.Controls.UrlsForImageColor(); oLink.Red = "204"; oLink.Green = "204"; oLink.Blue = "255"; oLink.Url = "http://www.foxnews.com"; oLink.AltTag = "light purple"; oLink.Target = "_blank"; oLink.OnMouseOver = ""; Links.Add(oLink); Response.Write(oMap.GetMap("Image2","images/region.gif",Links)); } catch (Exception err) { Response.Write(err.Message); } } </script>