簡體   English   中英

生成透明PNG c#

[英]Generate transparent PNG c#

我有以下功能來生成示例徽標。 我想要做的是返回一個透明的 png 或 gif 而不是白色背景。

我怎樣才能做到這一點?

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

CreateLogo函數中:

  • objGraphics.Clear(Color.White)改為objGraphics.Clear(Color.Transparent)
  • new SolidBrush(Color.FromArgb(102, 102, 102))改為new SolidBrush(Color.FromArgb(255, 255, 255))

你可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM