private void addImage() 
        {
            Bitmap bmp = new Bitmap("test.bmp");
            this.pictureBox1.Image = bmp;
        }
        /// <summary>
        /// 添加文字水印
        /// </summary>
        private void addText() 
        {
            Graphics g = this.pictureBox1.CreateGraphics();
            Font f = new Font("Verdana ", 55);
            Brush b = new SolidBrush(Color.Yellow);
            g.DrawString("您好", f, b, 10, 10);
            g.Dispose();
        }
//如果我将上面两个方法分别在两个按钮的点击事件中调用
private void btn1_Click(object sender, EventArgs e)
        {
            //在一个方法中连着调用addImage和addText,看不到addText的效果;
            //如果在另外一个按钮的方法中调用addText,就有效果
            addImage();
        }
private void btn2_Click(object sender, EventArgs e)
        {
            //在一个方法中连着调用addImage和addText,看不到addText的效果;
            //如果在另外一个按钮的方法中调用addText,就有效果
            addText();
        }
//***************点击btn1后再点击btn2,有文字水印效果***************//***************直接点击btn3,没有文字水印效果,
//快速点击btn3后发现有文字水印效果,但是出现后马上又消失了***************
private void btn3_Click(object sender, EventArgs e)
        {
            addImage();
            addText();
        }
//***************直接点击btn3,没有文字水印效果,
//快速点击btn3后发现有文字水印效果,但是出现后马上又消失了***************
这是为什么呢? 谁能帮帮忙,我就想给一个控件加载图片后,再添加水印效果上去,但是水印效果不能是加到图片上,因为我后面还需要用到图片

解决方案 »

  1.   

     //拿到封面图片
                string coverPath1 = context.Server.MapPath("BookCovers") + "/7111174739.jpg";
                Image cover1 = Image.FromFile(coverPath1);
                //拿到水印图片
                string waterPath1 = context.Server.MapPath("images") + "/WaterMark" + ".jpg";
                Image water1 = Image.FromFile(waterPath1);
                Graphics g1 = Graphics.FromImage(cover1);
                g1.DrawImage(water1, cover1.Width - water1.Width, cover1.Height - water1.Height, water1.Width, water1.Height);//在cover图片上面画水印(当然你不需要,这句代码就不用)
                cover1.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);//将图片保存在输出流
                water1.Dispose(); //释放资源
                cover1.Dispose();
                g1.Dispose();
      

  2.   

    连着调很快就消失,分开调可以的话,那在执行addImage()和Thread.sleep一段时间再调用addText();
    看看行不行。可能是因为图片把文字覆盖了。
      

  3.   

    在picturebox的Paint事件中添加水印。
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                Font f = new Font("Verdana ", 55);
                Brush b = new SolidBrush(Color.Yellow);
                e.Graphics.DrawString("おはよう", f, b, 10, 10);
            }
    不然picturebox重绘的时候,你临时添加的内容肯定没了。