2016-06-04 3 views
1

J'ai ce code net de C# asp point pour ajouter une marque d'eau sur le contrôle d'image asp qui fonctionne bien.Marque d'eau sur l'erreur d'image à l'intérieur de la vue de la liste asp dot net

  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); 


        } 
       } 
      } 

mais quand j'ajoute le même code de marque d'eau dans listview sur l'événement databound listview comme

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); 


        } 
       } 
      } 
     } 
    } 
} 

il me donne l'erreur suivante CustomCoupon \ ca00453f-c985-4794-9a87-36a60e2fa0e1.png » parce qu'il est utilisé par un autre processus.

Veuillez nous consulter.

Répondre

1

Vous pouvez remplacer:

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

par:

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