BinaryImage.cs
上传用户:li2971742
上传日期:2021-11-18
资源大小:39096k
文件大小:7k
源码类别:

OA系统

开发平台:

C#

  1. using System;
  2. using System.Collections.Specialized;
  3. using System.Text;
  4. using System.Drawing;
  5. using System.Drawing.Design;
  6. using System.Drawing.Imaging;
  7. using System.IO;
  8. using System.ComponentModel;
  9. using System.ComponentModel.Design;
  10. using System.Web;
  11. using System.Web.UI;
  12. using System.Web.UI.Design;
  13. using System.Web.UI.WebControls;
  14. namespace OThinker.H3.WorkSheet
  15. {
  16. [ToolboxData("<{0}:BinaryImage runat=server></{0}:BinaryImage>"), Designer(typeof(BinaryImageDesigner)), Description("")]
  17. public class BinaryImage : WebControl
  18. {
  19. private byte[] m_Binary;
  20. private bool m_FixIsDefault;
  21. public BinaryImage()
  22. {
  23. }
  24. #region 相关属性
  25. #region 公开属性
  26. [Browsable(false), Description("图片二进制数据")]
  27. public byte[] Binary
  28. {
  29. get { return m_Binary; }
  30. set { m_Binary = value; }
  31. }
  32. [DefaultValue(false), Description("是否以固定图片为首选项:true优先显示固定图片,false则优先显示二进制图片")]
  33. public bool FixIsDefault
  34. {
  35. get { return m_FixIsDefault; }
  36. set { m_FixIsDefault = value; }
  37. }
  38.         private string _FixImageSrc;
  39. [DefaultValue(""), Description("设置固定图片地址"), Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))]
  40. public virtual string FixImageSrc
  41. {
  42. get
  43. {
  44.                 return this._FixImageSrc;
  45. }
  46. set
  47. {
  48.                 this._FixImageSrc = value;
  49. }
  50. }
  51.         private System.Web.UI.WebControls.ImageAlign _ImageAlign = ImageAlign.NotSet;
  52. [DefaultValue(0), Category("Layout"), Description("图片对齐方式")]
  53. public virtual System.Web.UI.WebControls.ImageAlign ImageAlign
  54. {
  55. get
  56. {
  57.                 return this._ImageAlign;
  58. }
  59. set
  60. {
  61.                 this._ImageAlign = value;
  62. }
  63. }
  64. #endregion
  65. private bool IsImageShowing
  66. {
  67. get
  68. {
  69. bool flag1;
  70. try
  71. {
  72. flag1 = (this.Page.Request["BinaryImage"] != null) && (this.Page.Request["BinaryImage"] == this.ClientID);
  73. }
  74. catch
  75. {
  76. flag1 = false;
  77. }
  78. return flag1;
  79. }
  80. }
  81. private bool IsNothing
  82. {
  83. get
  84. {
  85. if ((this.Binary != null) && (this.Binary.Length != 0) || !(this.FixImageSrc == null))
  86. {
  87. return false;
  88. }
  89. return true;
  90. }
  91. }
  92. protected virtual string ImageUrl
  93. {
  94. get
  95. {
  96. NameValueCollection col = new NameValueCollection();
  97. col.Add("BinaryImage", this.ClientID);
  98. return BuildUrlString(col);
  99. }
  100. }
  101. #endregion
  102. protected override void OnLoad(EventArgs e)
  103. {
  104. if (this.IsImageShowing)
  105. {
  106. if (!this.IsNothing)
  107. this.RenderImage();
  108. }
  109. base.OnLoad(e);
  110. }
  111. protected override void Render(HtmlTextWriter writer)
  112. {
  113. writer.WriteBeginTag("img");
  114. if (this.TabIndex != 0)
  115. {
  116. writer.WriteAttribute("tabindex", this.TabIndex.ToString());
  117. }
  118. writer.WriteAttribute("border", "0");
  119. if (!this.IsNothing)
  120. {
  121. writer.WriteAttribute("src", this.ImageUrl);
  122. writer.WriteAttribute("Title", this.ToolTip);
  123. }
  124. else
  125. {
  126. writer.WriteAttribute("Title", "控件未曾初始化");
  127. }
  128. writer.WriteAttribute("id", this.ClientID + "_image");
  129. if (!(this.CssClass == null))
  130. writer.WriteAttribute("Class", this.CssClass);
  131. if (!this.Width.IsEmpty)
  132. writer.WriteAttribute("Width", this.Width.ToString());
  133. if (!this.Height.IsEmpty)
  134. writer.WriteAttribute("Height", this.Height.ToString());
  135. #region 对齐方式
  136. System.Web.UI.WebControls.ImageAlign align1 = this.ImageAlign;
  137. if (align1 != System.Web.UI.WebControls.ImageAlign.NotSet)
  138. {
  139. string text2;
  140. switch (align1)
  141. {
  142. case System.Web.UI.WebControls.ImageAlign.Left:
  143. {
  144. text2 = "left";
  145. break;
  146. }
  147. case System.Web.UI.WebControls.ImageAlign.Right:
  148. {
  149. text2 = "right";
  150. break;
  151. }
  152. case System.Web.UI.WebControls.ImageAlign.Baseline:
  153. {
  154. text2 = "baseline";
  155. break;
  156. }
  157. case System.Web.UI.WebControls.ImageAlign.Top:
  158. {
  159. text2 = "top";
  160. break;
  161. }
  162. case System.Web.UI.WebControls.ImageAlign.Middle:
  163. {
  164. text2 = "middle";
  165. break;
  166. }
  167. case System.Web.UI.WebControls.ImageAlign.Bottom:
  168. {
  169. text2 = "bottom";
  170. break;
  171. }
  172. case System.Web.UI.WebControls.ImageAlign.AbsBottom:
  173. {
  174. text2 = "absbottom";
  175. break;
  176. }
  177. case System.Web.UI.WebControls.ImageAlign.AbsMiddle:
  178. {
  179. text2 = "absmiddle";
  180. break;
  181. }
  182. default:
  183. {
  184. text2 = "texttop";
  185. break;
  186. }
  187. }
  188. writer.AddAttribute(HtmlTextWriterAttribute.Align, text2);
  189. }
  190. #endregion
  191. writer.Write('>');
  192.             
  193. }
  194. private void RenderImage()
  195. {
  196. byte[] byte1;
  197. if (this.FixIsDefault)
  198. {
  199. byte1 = (this.FixImageSrc == null) ? this.Binary : GetFromFile(this.Page.Server.MapPath(this.FixImageSrc));
  200. }
  201. else
  202. {
  203. byte1 = ((this.Binary != null) && (this.Binary.Length != 0)) ? this.Binary : GetFromFile(this.Page.Server.MapPath(this.FixImageSrc));
  204. }
  205. RenderImage(byte1);
  206. }
  207. private string BuildUrlString(NameValueCollection col)
  208. {
  209. string currentUrl = Page.Request.Path;
  210. NameValueCollection urlParams = Page.Request.QueryString;
  211. int i;
  212. string tempstr = "";
  213. if (urlParams == null || urlParams.Count <= 0)
  214. {
  215. for (i = 0; i < col.Count; i++)
  216. {
  217. tempstr += String.Concat("&", col.Keys[i], "=", col[i]);
  218. }
  219. return String.Concat(currentUrl, "?", tempstr.Substring(1));
  220. }
  221. NameValueCollection newCol = new NameValueCollection(urlParams);
  222. string[] newColKeys = newCol.AllKeys;
  223. for (i = 0; i < newColKeys.Length; i++)
  224. {
  225. newColKeys[i] = newColKeys[i].ToLower();
  226. }
  227. for (i = 0; i < col.Count; i++)
  228. {
  229. if (Array.IndexOf(newColKeys, col.Keys[i].ToLower()) < 0)
  230. newCol.Add(col.Keys[i], col[i]);
  231. else
  232. newCol[col.Keys[i]] = col[i];
  233. }
  234. System.Text.StringBuilder sb = new System.Text.StringBuilder();
  235. for (i = 0; i < newCol.Count; i++)
  236. {
  237. sb.Append("&");
  238. sb.Append(newCol.Keys[i]);
  239. sb.Append("=");
  240. sb.Append(newCol[i]);
  241. }
  242. return String.Concat(currentUrl, "?", sb.ToString().Substring(1));
  243. }
  244. #region 静态方法
  245. public static byte[] GetFromFile(string path)
  246. {
  247. FileInfo info1 = new FileInfo(path);
  248. FileStream stream1 = info1.OpenRead();
  249. byte[] buffer1 = new byte[stream1.Length];
  250. stream1.Read(buffer1, 0, int.Parse(stream1.Length.ToString()));
  251. return buffer1;
  252. }
  253. private static void RenderImage(byte[] byteImg)
  254. {
  255. System.Drawing.Image image1 = System.Drawing.Image.FromStream(new MemoryStream(byteImg));
  256. HttpContext.Current.Response.ClearContent();            
  257. HttpContext.Current.Response.BinaryWrite(byteImg);
  258. HttpContext.Current.Response.End();
  259. }
  260. #endregion
  261. }
  262. public class BinaryImageDesigner : ControlDesigner
  263. {
  264. public override string GetDesignTimeHtml()
  265. {
  266. BinaryImage bImg = (BinaryImage)Component;
  267. string imgWidth = bImg.Width.IsEmpty ? string.Empty : string.Format(" Width='{0}' ",bImg.Width.ToString());
  268. string imgHeight = bImg.Height.IsEmpty ? string.Empty : string.Format(" Height='{0}' ",bImg.Height.ToString());
  269. return string.Format("<img border='0' src='{0}'{1}{2} Title='设计模式'>", null, imgWidth, imgHeight);
  270. }
  271. }
  272. }