2009-09-08 54 views
5

我有下面的函數來生成一個示例徽標。我想要做的是返回一個透明的PNG或GIF而不是白色背景。 我該怎麼辦?生成透明的PNG c#

private Bitmap CreateLogo(string subdomain) 
{ 

    Bitmap objBmpImage = new Bitmap(1, 1); 
    int intWidth = 0; 
    int intHeight = 0; 
    Font objFont = new Font("Arial", 13, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel); 
    Graphics objGraphics = Graphics.FromImage(objBmpImage); 
    intWidth = (int)objGraphics.MeasureString(subdomain, objFont).Width; 
    intHeight = (int)objGraphics.MeasureString(subdomain, objFont).Height; 
    objBmpImage = new Bitmap(objBmpImage, new Size(intWidth, intHeight)); 
    objGraphics = Graphics.FromImage(objBmpImage); 
    objGraphics.Clear(Color.White); 
    objGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
    objGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
    objGraphics.DrawString(subdomain, objFont, new SolidBrush(Color.FromArgb(102, 102, 102)), 0, 0); 
    objGraphics.Flush(); 
    return (objBmpImage); 


} 

這裏是最終的結果

context.Response.ContentType = "image/png"; 
      using (MemoryStream memStream = new MemoryStream()) 
      { 
       CreateLogo(_subdname).Save(memStream, ImageFormat.Png); 
       memStream.WriteTo(context.Response.OutputStream); 
      } 

功能

private Bitmap CreateLogo(string subdomain) 
{ 

    Bitmap objBmpImage = new Bitmap(1, 1); 
    int intWidth = 0; 
    int intHeight = 0; 
    Font objFont = new Font("Arial", 13, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel); 
    Graphics objGraphics = Graphics.FromImage(objBmpImage); 
    intWidth = (int)objGraphics.MeasureString(subdomain, objFont).Width; 
    intHeight = (int)objGraphics.MeasureString(subdomain, objFont).Height; 
    objBmpImage = new Bitmap(objBmpImage, new Size(intWidth, intHeight)); 
    objGraphics = Graphics.FromImage(objBmpImage); 
    objGraphics.Clear(Color.Transparent); 
    objGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
    objGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
    objGraphics.DrawString(subdomain, objFont, new SolidBrush(Color.FromArgb(255, 255, 255)), 0, 0); 
    objGraphics.Flush(); 
    return (objBmpImage); 

} 

回答

11

你可以做這樣的事情:

 Bitmap bmp = new Bitmap(300, 300); 
     Graphics g = Graphics.FromImage(bmp); 

     g.Clear(Color.Transparent); 
     g.FillRectangle(Brushes.Red, 100, 100, 100, 100); 

     g.Flush(); 
     bmp.Save("test.png", System.Drawing.Imaging.ImageFormat.Png);