[.net]windows控制項實現浮水印

來源:互聯網
上載者:User

Windows控制項在Web下的引用,首先我們建立一個window控制項,項目名稱為EditImagePint,然後,

我們把項目下的UserControl1.cs改為ImagePint.cs,切記檔案名稱和建構函式都改!

先製作介面,首先在設計模式下,我們將一個PictureBox拖放到解面上,命名為pictureBox1

下面我們轉入字碼頁,也就是ImagePint.cs

我們需要引用的對象有:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO;
using System.Net;

然後我們寫一個函數

private void ImagePint_Load(object sender, System.EventArgs e)
{
/*具體代碼我們下面介紹*/
}

這個函數,是為了在web頁面使用時候載入使用的.

然後我們看控制項自己的產生代碼,把
this.Load += new System.EventHandler(this.ImagePint_Load);
加如InitializeComponent()中
#region 組件設計器產生的程式碼:

///
/// 設計器支援所需的方法 - 不要使用代碼編輯器
/// 修改此方法的內容。
///
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(0, 0);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// ImagePint
//
this.Controls.Add(this.pictureBox1);
this.Name = "ImagePint";
//看到了嗎?很明顯,先面的是我們加上去的
this.Load += new System.EventHandler(this.ImagePint_Load);
this.ResumeLayout(false);

}
#endregion

有了這些東西,組件就可以在web下使用了,但是既然是浮水印,就應該有原始圖片,和浮水印圖片,及一些其他的參數,這裡我們就用公用函數,至於web怎麼把值傳進去,我們到下面再說

#region 公用屬性

//顯示寬度
public int ImgWidht
{
get {return _ImgWidth;}
set {_ImgWidth = value;}
}

//顯示高度
public int ImgHeight
{
get {return _ImgHeight;}
set {_ImgHeight = value;}
}

//透明度
private int Alpha
{
get {return _Alpha;}
set {_Alpha = value;}
}

//主圖片地址
public string ZPicture
{
get {return _ZPicture;}
set {_ZPicture = value;}
}

//浮水印圖片地址
public string FPicture
{
get {return _FPicture;}
set {_FPicture = value;}
}

#endregion

 

下面把完整的代碼貢獻給大家:

代碼拷貝框
using System;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Drawing;<br />using System.Data;<br />using System.Windows.Forms;<br />using System.IO;<br />using System.Net;<br />namespace EditImagePint<br />{<br />/// <summary><br />/// UserControl1 的摘要說明。<br />/// </summary><br />public class ImagePint : System.Windows.Forms.UserControl<br />{<br />/// <summary><br />/// 必需的設計器變數。<br />/// </summary><br />private System.ComponentModel.Container components = null;<br />public ImagePint()<br />{<br />// 該調用是 Windows.Forms 表單設計器所必需的。<br />InitializeComponent();<br />// TODO: 在 InitComponent 調用後添加任何初始化<br />}<br />/// <summary><br />/// 清理所有正在使用的資源。<br />/// </summary><br />protected override void Dispose( bool disposing )<br />{<br />if( disposing )<br />{<br />if( components != null )<br />components.Dispose();<br />}<br />base.Dispose( disposing );<br />}<br />#region 組件設計器產生的程式碼<br />/// <summary><br />/// 設計器支援所需的方法 - 不要使用代碼編輯器<br />/// 修改此方法的內容。<br />/// </summary><br />private void InitializeComponent()<br />{<br />this.pictureBox1 = new System.Windows.Forms.PictureBox();<br />this.SuspendLayout();<br />//<br />// pictureBox1<br />//<br />this.pictureBox1.Location = new System.Drawing.Point(0, 0);<br />this.pictureBox1.Name = "pictureBox1";<br />this.pictureBox1.TabIndex = 0;<br />this.pictureBox1.TabStop = false;<br />//<br />// ImagePint<br />//<br />this.Controls.Add(this.pictureBox1);<br />this.Name = "ImagePint";<br />this.Load += new System.EventHandler(this.ImagePint_Load);<br />this.ResumeLayout(false);<br />}<br />#endregion<br />private Bitmap sImage;<br />private int sWidth;<br />private int sHeight;<br />private int _ImgWidth;<br />private System.Windows.Forms.PictureBox pictureBox1;<br />private int _ImgHeight;<br />private int _Alpha;<br />private string _ZPicture = String.Empty;<br />private string _FPicture = String.Empty;<br />#region 公用屬性<br />//顯示寬度<br />public int ImgWidht<br />{<br />get {return _ImgWidth;}<br />set {_ImgWidth = value;}<br />}<br />//顯示高度<br />public int ImgHeight<br />{<br />get {return _ImgHeight;}<br />set {_ImgHeight = value;}<br />}<br />//透明度<br />private int Alpha<br />{<br />get {return _Alpha;}<br />set {_Alpha = value;}<br />}<br />//主圖片地址<br />public string ZPicture<br />{<br />get {return _ZPicture;}<br />set {_ZPicture = value;}<br />}<br />//浮水印圖片地址<br />public string FPicture<br />{<br />get {return _FPicture;}<br />set {_FPicture = value;}<br />}<br />#endregion<br />private void ImagePint_Load(object sender, System.EventArgs e)<br />{<br />string sourceFile = _ZPicture;<br />string waterMarkFile = _FPicture;<br />//string sourceFile = @"http://localhost/Image/my.jpg";<br />//string waterMarkFile = @"http://localhost/Image/make.jpg";<br />sImage = tmpImage(sourceFile);<br />//sImage.Width = _ImgWidth==0?sImage.Width:_ImgWidth;<br />//sImage.Height = _ImgHeight==0?sImage.Height:_ImgHeight;<br />sWidth = _ImgWidth==0?sImage.Width:_ImgWidth;<br />sHeight = _ImgHeight==0?sImage.Height:_ImgHeight;<br />this.Width = sWidth;<br />this.Height = sHeight;<br />pictureBox1.Width = sWidth;<br />pictureBox1.Height = sHeight;<br />this.MakeWaterImage(waterMarkFile);<br />}<br />public Bitmap tmpImage(string strUrl)<br />{<br />Bitmap bitmap;<br />if(strUrl.IndexOf("http")<0)<br />{<br />bitmap = new Bitmap(strUrl);<br />return bitmap;<br />}<br />else<br />{<br />WebClient webClient = new WebClient();<br />Stream data = webClient.OpenRead(strUrl);<br />bitmap = new Bitmap(data);<br />return bitmap;<br />}<br />}<br />//方法作用:產生浮水印圖片<br />//sourceFile:要產生浮水印的圖片檔案<br />//WaterMarkFile:存放浮水印的圖片檔案<br />public void MakeWaterImage(string waterMarkFile)<br />{<br />try<br />{<br />//浮水印圖<br />Bitmap wImage = tmpImage(waterMarkFile);<br />int wWidth = wImage.Width;<br />int wHeight = wImage.Height;<br />//make Graphics.<br />Graphics g = Graphics.FromImage(sImage);<br />int x; //臨時變數<br />int y; //監時變數<br />int x1; //原圖和浮水印圖的寬度差<br />int y1; //原圖和浮水印圖的高度差<br />int w; //產生的浮水印圖的寬度<br />int h; //產生的浮水印圖的高度<br />int al; //alpha<br />int rl; //Red<br />int gl; //Green<br />int bl; //Blue<br />if(sWidth > wWidth)<br />{<br />x1 = sWidth - wWidth;<br />y1 = sHeight - wHeight;<br />w = wWidth;<br />h = wHeight;<br />}<br />else<br />{<br />x1 = 0;<br />y1 = 0;<br />w = sWidth;<br />h = sHeight;<br />}<br />//開始繪圖<br />for(x = 1; x < w; x++)<br />{<br />for(y = 1; y < h; y++)<br />{<br />al = wImage.GetPixel(x,y).A;<br />rl = wImage.GetPixel(x,y).R;<br />gl = wImage.GetPixel(x,y).G;<br />bl = wImage.GetPixel(x,y).B;<br />al = _Alpha==0?30:_Alpha;<br />if(rl + 25 < 255)<br />rl += 25;<br />if(gl + 25 < 255)<br />gl += 25;<br />if(bl + 25 < 255)<br />bl += 25;<br />g.DrawEllipse(new Pen(new SolidBrush(Color.FromArgb(al,rl,gl,bl))),x1+x,y1+y,1,1);<br />}<br />}<br />g.Save();<br />pictureBox1.Image = sImage;<br />}<br />catch(Exception ex)<br />{<br />MessageBox.Show(ex.Message);<br />}<br />}<br />}<br />}<br />
[Ctrl+A 全部選擇 然後拷貝]

然後我們把這個控制項產生一個Release版本,然後把產生的dll檔案copy到你的虛擬目錄下,然後就是web調用了,我們先建立一個虛擬目錄,比如說我們建立的虛擬目錄及地址為:
localhost/Object/ImagePrint/
我們就把產生的 EditImagePint.DLL 檔案copy到這個目錄下
並建立一個html檔案,把以下的代碼放進去:

<object id="print" classid="http://localhost/Object/ImagePrint/
EditImagePint.dll#EditImagePint.ImagePint"
Width="177" Height="144" VIEWASTEXT >
<param name="ImgWidht" value="177">
<param name="ImgHeight" value="144">
<param name="Alpha" value="40">
<param name="ZPicture" value="http://localhost/Object/ImagePrint/my.jpg">
<param name="FPicture" value="http://localhost/Object/ImagePrint/make.jpg">
</object>

看到了把,這些param就是我們的公用屬性了:),這樣就把值傳遞進去了

最終顯示如下:

對不起大家,目前還不支援GIF

源碼下載:點擊下載

切記HTML裡面的object的classid需要根據你的虛擬目錄變化

經典論壇討論帖:
http://www.blueidea.com/bbs/newsdetail.asp?id=2553689

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.