C#生成透明背景图片的方法「建议收藏」

C#生成透明背景图片的方法「建议收藏」///<summary>///ReturnsatransparentbackgroundGIFimagefromthespecifiedBitmap.///</summary>///<paramname=”bitmap”>TheBitmaptomaketransparent.&l…

大家好,又见面了,我是你们的朋友全栈君。

    /// <summary>
    /// Returns a transparent background GIF image from the specified Bitmap.
    /// </summary>
    /// <param name=”bitmap”>The Bitmap to make transparent.</param>
    /// <param name=”color”>The Color to make transparent.</param>
    /// <returns>New Bitmap containing a transparent background gif.</returns>
    public Bitmap MakeTransparentGif(Bitmap bitmap, Color color)
    {

        byte R = color.R;
        byte G = color.G;
        byte B = color.B;
        MemoryStream fin = new MemoryStream();
        bitmap.Save(fin, System.Drawing.Imaging.ImageFormat.Gif);
        MemoryStream fout = new MemoryStream((int)fin.Length);
        int count = 0;
        byte[] buf = new byte[256];
        byte transparentIdx = 0;
        fin.Seek(0, SeekOrigin.Begin);
        //header
        count = fin.Read(buf, 0, 13);
        if ((buf[0] != 71) || (buf[1] != 73) || (buf[2] != 70)) return null; //GIF
        fout.Write(buf, 0, 13);
        int i = 0;
        if ((buf[10] & 0x80) > 0)
        {

            i = 1 << ((buf[10] & 7) + 1) == 256 ? 256 : 0;
        }
        for (; i != 0; i–)
        {

            fin.Read(buf, 0, 3);
            if ((buf[0] == R) && (buf[1] == G) && (buf[2] == B))
            {

                transparentIdx = (byte)(256 – i);
            }
            fout.Write(buf, 0, 3);
        }
        bool gcePresent = false;
        while (true)
        {

            fin.Read(buf, 0, 1);
            fout.Write(buf, 0, 1);
            if (buf[0] != 0x21) break;
            fin.Read(buf, 0, 1);
            fout.Write(buf, 0, 1);
            gcePresent = (buf[0] == 0xf9);
            while (true)
            {

                fin.Read(buf, 0, 1);
                fout.Write(buf, 0, 1);
                if (buf[0] == 0) break;
                count = buf[0];
                if (fin.Read(buf, 0, count) != count) return null;
                if (gcePresent)
                {

                    if (count == 4)
                    {

                        buf[0] |= 0x01;
                        buf[3] = transparentIdx;
                    }
                }
                fout.Write(buf, 0, count);
            }
        }
        while (count > 0)
        {

            count = fin.Read(buf, 0, 1);
            fout.Write(buf, 0, 1);
        }
        fin.Close();
        fout.Flush();
        return new Bitmap(fout);
    }
    public void doTextImage(string FamilyName, string fontStyle, string FontWeight, string Text, int intFontSize, string FontColor, int Width, int Height, string TextAlign)
    {

        Bitmap bitmap = null;

        bitmap = new Bitmap(Width, Height);

        Graphics g = Graphics.FromImage(bitmap);

        //设置画笔

        Color color = ColorTranslator.FromHtml(FontColor);

        Brush brush = new SolidBrush(color);

        //设置字体

        FontStyle ftStyle = new FontStyle();

        if (fontStyle.ToLower() == “italic” && FontWeight.ToLower() == “bold”)
        {

            ftStyle = FontStyle.Italic | FontStyle.Bold;

        }

        else if (fontStyle.ToLower() == “italic” && FontWeight.ToLower() != “bold”)
        {

            ftStyle = FontStyle.Italic;

        }

        else if (fontStyle.ToLower() != “italic” && FontWeight.ToLower() == “bold”)
        {

            ftStyle = FontStyle.Bold;

        }

        else
        {

            ftStyle = FontStyle.Regular;

        }

        Font font;

        font = new Font(FamilyName, intFontSize, ftStyle, GraphicsUnit.Pixel);

        //设置绘图区域

        RectangleF rect = new RectangleF(0, 0, Width, Height);

        //设置文本绘制格式

        StringFormat stringFormat = new StringFormat();

        if (TextAlign.ToLower() == “center”)
        {

            stringFormat.LineAlignment = StringAlignment.Center;

        }

        else if (TextAlign.ToLower() == “right”)
        {

            stringFormat.LineAlignment = StringAlignment.Far;

        }

        else
        {

            stringFormat.LineAlignment = StringAlignment.Near;

        }

        //设置绘图质量

        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        g.SmoothingMode = SmoothingMode.HighQuality;

        g.PixelOffsetMode = PixelOffsetMode.HighQuality;

        g.CompositingMode = CompositingMode.SourceOver;

        g.CompositingQuality = CompositingQuality.HighQuality;

        g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

        g.PageUnit = GraphicsUnit.Pixel;

        //设置透明背景

        g.Clear(Color.Transparent);

        //绘制字符串

        g.DrawString(Text, font, brush, rect, stringFormat);

        //取浏览器版本,IE6显示透明gif,其它则显示透明png

        if (GetBrowsetype() == “IE” && GetBrowseVersion() == “6.0”)
        {

            bitmap = MakeTransparentGif(bitmap, Color.Black);

            System.IO.MemoryStream ms = new System.IO.MemoryStream();

            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

            byte[] bytes = ms.GetBuffer();

            g.Dispose();

            bitmap.Dispose();

            Response.Clear();

            Response.ContentType = “image/Gif”;

            Response.BinaryWrite(bytes);

        }

        else
        {

            System.IO.MemoryStream ms = new System.IO.MemoryStream();

            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

            byte[] bytes = ms.GetBuffer();

            g.Dispose();

            bitmap.Dispose();

            Response.Clear();

            Response.ContentType = “image/Png”;

            Response.BinaryWrite(bytes);

        }

    }
    public static string GetBrowseVersion()
    {

        System.Web.HttpBrowserCapabilities browser = System.Web.HttpContext.Current.Request.Browser;

        return browser.Version;

    }

    public static string GetBrowsetype()
    {

        System.Web.HttpBrowserCapabilities browser = System.Web.HttpContext.Current.Request.Browser;

        return browser.Browser;

    }

转载于:https://www.cnblogs.com/QGame/archive/2012/02/09/2344355.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162696.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python – 两数之和

    Python – 两数之和给定列表a和一个目标值target,求列表中两数之和为target的值的索引;a=[1,5,6,8,9,4,5,6,3,2,1,7,5,6,9,8,4,5,6,2,1,0,1,2,0,1,2,5,9,10]b=[11,55,88,99,66,4,77,33,22,1,6,12,35]穷举(适应性强)defx(nums,target):result=[]…

    2022年5月3日
    39
  • springboot eureka集群部署_springmvc框架原理

    springboot eureka集群部署_springmvc框架原理1、相关环境开发工具:idea;springboot版本:2.1.13springcloud版本:Finchley.SR1(注意,此处使用的是springboot2.0.x以上的版本,而springcloud对应的版本为Finchley,且springboot2.0相比于springboot1.5.x来说,maven依赖变化较大,这个问题在搭建分布式项目时我会做出说明)中间件:eurek…

    2022年8月21日
    8
  • 怎样使用灭火器正确灭火_principal和main的区别

    怎样使用灭火器正确灭火_principal和main的区别这个是翻译来的,原文地址:http://www.landley.net/writing/rootfs-howto.html怎样使用initramfs 工作过程简述在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是rootfilesystem的缩写)。rootfs是一个特殊的tmpfs,这个不能被

    2022年8月11日
    3
  • ”周期天王”20大预言,针针见血,看完整个人通透多了

    ”周期天王”20大预言,针针见血,看完整个人通透多了周期天王”20大预言,针针见血,看完整个人通透多了东方财富网、投行大师兄 2017-05-0914:07近期,股市个股乏力、债市毫无起色、商品跌跌不休。一行三会大力推进金融去杠杆,再叠加地产调控持续加码与信贷收缩,市场风险偏好显著下降,股、债、商“三杀”频现。无论是美联储3月暂缓加息的佳音,还是法国大选暂无黑天鹅的捷报,都无法振奋我们的市场丝毫。外盘一

    2025年5月25日
    0
  • SQL Prompt10 安装激活教程,让你写sql 如鱼得水[通俗易懂]

    SQL Prompt10 安装激活教程,让你写sql 如鱼得水[通俗易懂]需要sql_Prompt10压缩包的请看文章最底下1.首先得有我们的SQLPrompt10压缩包2.选择SQLPromptDownload.exe进行安装打开安装界面,全部勾选选点击continue——–>>继续下一步点击accept选择安装位置,一般不推荐安装C盘,继续install——>>>>等待安装完成点击finish3.打开sqlserver数据库打开sqlserver数据库,可能有些兄弟进入不是这样得,有sql_

    2022年7月26日
    48
  • pycharm TODO_pycharm中如何注释掉代码块

    pycharm TODO_pycharm中如何注释掉代码块pycharm中可以在#后面加TODO提示自己后续的开发动作。点击pycharm又下角的小标签,会弹出一个列表,选择TODO选项。 进入TODO选项,可以看见所以设置的TODO,选择一个TODO进行单击,可以跳到该TODO设置的位置。…

    2022年8月26日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号