ASP.Net/XML/Web safe color

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Web safe color list

<%--
Pro ASP.NET Web Forms Techniques, Second Edition
By Alex Homer
ISBN: 1-59059-317-0
Published: Dec 2003
Publisher: Apress.ru
--%>       
       
<%@Page Language="C#" %>
<%@Import Namespace="System.Drawing" %>
<script runat="server">
void Page_Load() {
  // array to hold list of 168 "known" colors
  Color[] aKnownCols = new Color[168];
  KnownColor eValue;
  for (eValue = 0; eValue <= KnownColor.YellowGreen; eValue++) {
    aKnownCols[(int) eValue] = Color.FromKnownColor(eValue);
  }
  // array to hold list of 216 browser-safe colors
  Color[] aSafeCols = new Color[216];
  int rValue, gValue, bValue;
  int iPointer = 0;
  for (rValue = 0; rValue <= 255; rValue += 51) {
    for (gValue = 0; gValue <= 255; gValue += 51) {
      for (bValue = 0; bValue <= 255; bValue += 51) {
        aSafeCols[iPointer] = Color.FromArgb(rValue, gValue, bValue);
        iPointer += 1;
      }
    }
  }
  // create a table containing the browser-safe colors
  // and indicate any matching .NET standard color
  // declare variables, we"ll create 5 rows simultaneously
  TableRow oRow1, oRow2, oRow3, oRow4, oRow5;
  TableCell oCell;
  Color oKnown;
  String sDecimalVals, sHexVals, sKnown;
  // to create empty cell with colored background
  String sColorCell = "<font size=5>&nbsp; &nbsp; &nbsp; &nbsp;</font>";
  // create empty Table object and five Row objects
  Table oTable = new Table();
  oRow1 = new TableRow();
  oRow2 = new TableRow();
  oRow3 = new TableRow();
  oRow4 = new TableRow();
  oRow5 = new TableRow();
  // set horizontal alignment for three rows
  oRow2.HorizontalAlign = HorizontalAlign.Center;
  oRow3.HorizontalAlign = HorizontalAlign.Center;
  oRow4.HorizontalAlign = HorizontalAlign.Center;
  // iterate through array of safe colors
  foreach (Color oColor in aSafeCols) {
    // create the strings showing decimal and hex RGB values
    sDecimalVals = oColor.R.ToString() + "," + oColor.G.ToString()
                 + "," + oColor.B.ToString();
    sHexVals = "#" + oColor.R.ToString("x2") + oColor.G.ToString("x2")
             + oColor.B.ToString("x2");
    // see if this color is same as any standard color by iterating
    // through "known" colors array and comparing ARGB values.
    // not breaking at first match avoids returning "system" colors
    // such as "DialogText" and "WindowTitleBarText" which come first
    sKnown = "";
    foreach (Color oEKnown in aKnownCols) {
      if (oEKnown.ToArgb() == oColor.ToArgb()) {
        sKnown = oEKnown.Name;
      }
    }
    // create a new cell, and add LiteralControl containing value
    oCell = new TableCell();
    oCell.Controls.Add(new LiteralControl(sColorCell));
    // set properties for this cell, and add to row 1
    oCell.BorderColor = Color.Black;
    oCell.BorderStyle = BorderStyle.Solid;
    oCell.BorderWidth = Unit.Pixel(1);
    oCell.BackColor = oColor;
    oRow1.Cells.Add(oCell);
    // repeat for cells containing decimal and hex RGB values
    oCell = new TableCell();
    oCell.Controls.Add(new LiteralControl(sDecimalVals));
    oRow2.Cells.Add(oCell);
    oCell = new TableCell();
    oCell.Controls.Add(new LiteralControl(sHexVals));
    oRow3.Cells.Add(oCell);
    // create cell for matching "known" color if there is one
    oCell = new TableCell();
    if (sKnown != "") {
      oCell.Controls.Add(new LiteralControl(sKnown));
      // create color object using "known" color name
      Color oEKnown = Color.FromName(sKnown);
      oCell.BackColor = oEKnown;
      oCell.BorderColor = Color.Black;
      oCell.BorderStyle = BorderStyle.Solid;
      oCell.BorderWidth = Unit.Pixel(1);
      // see if we need to use white text on this background
      // color when displaying color name in cell
      if (oEKnown.R < 124 && oEKnown.G < 124) {
        oCell.ForeColor = Color.White;
      }
    }
    // add "known color" cell to row 4
    oRow4.Cells.Add(oCell);
    // create cell in row 5 to provide space between color rows
    oCell = new TableCell();
    oCell.Controls.Add(new LiteralControl("&nbsp;"));
    oRow5.Cells.Add(oCell);
    // if Blue element of color has reached 255 start a new row
    // add five existing rows to table, create new ones and set
    // horizontal alignment for the three of them holding text
    if (oColor.B == 255) {
      oTable.Rows.Add(oRow1);
      oTable.Rows.Add(oRow2);
      oTable.Rows.Add(oRow3);
      oTable.Rows.Add(oRow4);
      oTable.Rows.Add(oRow5);
      oRow1 = new TableRow();
      oRow2 = new TableRow();
      oRow3 = new TableRow();
      oRow4 = new TableRow();
      oRow5 = new TableRow();
      oRow2.HorizontalAlign = HorizontalAlign.Center;
      oRow3.HorizontalAlign = HorizontalAlign.Center;
      oRow4.HorizontalAlign = HorizontalAlign.Center;
    }
  }
  // table complete, so insert into page within PlaceHolder control
  ctlPlaceholder.Controls.Add(oTable);
}
</script>
<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Browser-safe and Standard Colors</title>
</head>
<body>
Browser-safe and Standard Colors
<asp:PlaceHolder id="ctlPlaceholder" runat="server" />
</body>
</html>