代码之家  ›  专栏  ›  技术社区  ›  user3597236

列表视图asp点网内图像上的水印错误

  •  1
  • user3597236  · 技术社区  · 10 年前

    我有这个c asp点网代码,可以在asp图像控件上添加水印,它工作正常。

               string watermarkText = "© water mark";
                string fileName = Server.MapPath(myimg.ImageUrl);
                FileStream fs = new FileStream(fileName, FileMode.Open);
                using (Bitmap bmp = new Bitmap(fs, false))
                {
                    using (Graphics grp = Graphics.FromImage(bmp))
                    {
                        Brush brush = new SolidBrush(Color.Red);
                        Font font = new System.Drawing.Font("Arial", 30, FontStyle.Bold, GraphicsUnit.Pixel);
                        SizeF textSize = new SizeF();
                        textSize = grp.MeasureString(watermarkText, font);
                        Point position = new Point((bmp.Width - ((int)textSize.Width + 10)), (bmp.Height - ((int)textSize.Height + 80)));
                        grp.DrawString(watermarkText, font, brush, position);
    
    
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
    
                            bmp.Save(memoryStream, ImageFormat.Png);
                            string base64String = Convert.ToBase64String(memoryStream.ToArray());
                            string imageUrl = "data:image/png;base64," + base64String;
                            myimg.Attributes.Add("src", imageUrl);
    
    
                        }
                    }
                }
    

    但当我在listview的listview数据绑定事件中添加相同的水印代码时,比如

        System.Web.UI.WebControls.Image myimg;
    protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
    
        if (!IsPostBack)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                myimg = ((System.Web.UI.WebControls.Image)e.Item.FindControl("Image1"));
    
    
    
                string watermarkText = "© watermark";
                string fileName = Server.MapPath(myimg.ImageUrl);
                FileStream fs = new FileStream(fileName, FileMode.Open);
                using (Bitmap bmp = new Bitmap(fs, false))
                {
                    using (Graphics grp = Graphics.FromImage(bmp))
                    {
                        Brush brush = new SolidBrush(Color.Red);
                        Font font = new System.Drawing.Font("Arial", 30, FontStyle.Bold, GraphicsUnit.Pixel);
                        SizeF textSize = new SizeF();
                        textSize = grp.MeasureString(watermarkText, font);
                        Point position = new Point((bmp.Width - ((int)textSize.Width + 10)), (bmp.Height - ((int)textSize.Height + 80)));
                        grp.DrawString(watermarkText, font, brush, position);
    
    
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
    
                            bmp.Save(memoryStream, ImageFormat.Png);
                            string base64String = Convert.ToBase64String(memoryStream.ToArray());
                            string imageUrl = "data:image/png;base64," + base64String;
                            myimg.Attributes.Add("src", imageUrl);
    
    
                        }
                    }
                }
            }
        }
    }
    

    因此,它给出了以下错误CustomCoupon\ca00453f-c985-4794-9a87-36a60e2fa0e1.png,因为它正被另一个进程使用。

    请提出建议。

    1 回复  |  直到 10 年前
        1
  •  1
  •   ConnorsFan    10 年前

    您可以替换:

    FileStream fs = new FileStream(fileName, FileMode.Open);
    

    签署人:

    using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    {
        ...
    }
    
    推荐文章