C#怎么实现在底图上动态生成文字和图片
创始人
2024-12-21 08:03:24
0次

本文主要记录在图片上动态的生成需要添加的文字和把指定的图片加到底图上,直接上代码

/// /// 在底图上画指定路径的图片/// /// 画板实例/// 图片路径/// 画区总长度/// 画区总高度/// 起点X坐标/// 起点Y坐标  private void FontPic(ref Graphics g, string path, int totalWidth, int totalHeight, int px, int py)  {   if (File.Exists(path))   {    var pImg = Image.FromFile(path);    //如果图片大于画布区域,则缩小    if (totalHeight < pImg.Height && totalWidth < pImg.Width)    {     Image newPic = GetReducedImage(pImg, totalWidth, totalHeight);     if (newPic != null)     {      DrawPic(ref g, totalWidth, totalHeight, px, py, newPic);     }    }    else if (totalHeight < pImg.Height && totalWidth >= pImg.Width)    {     Image newPic = GetReducedImage(pImg, pImg.Width, totalHeight);     if (newPic != null)     {      DrawPic(ref g, totalWidth, totalHeight, px, py, newPic);     }    }    else if (totalHeight >= pImg.Height && totalWidth < pImg.Width)    {     Image newPic = GetReducedImage(pImg, totalWidth, pImg.Height);     if (newPic != null)     {      DrawPic(ref g, totalWidth, totalHeight, px, py, newPic);     }    }    else    {     DrawPic(ref g, totalWidth, totalHeight, px, py, pImg);    }   }  }  ///   /// 在图上画图片  ///   /// 画板实例  /// 画区总长度  /// 画区总高度  /// 起点X坐标  /// 起点Y坐标  /// 要画的图片实例  private void DrawPic(ref Graphics g, int totalWidth, int totalHeight, int px, int py, Image pImg)  {   px += GetValue(totalWidth, pImg.Width);   py += GetValue(totalHeight, pImg.Height);    g.DrawImage(new Bitmap(pImg, new Size(GetSize(totalWidth, pImg.Width), GetSize(totalHeight, pImg.Height))),    new Rectangle(px, py, totalWidth, totalHeight),    0, 0, totalWidth, totalHeight, GraphicsUnit.Pixel);  }  ///    /// 生成缩略图重载方法1,返回缩略图的Image对象   ///    /// 缩略图的宽度   /// 缩略图的高度   /// 缩略图的Image对象   public Image GetReducedImage(Image resourceImage, int width, int height)  {   try   {    Image data = null;    //用指定的大小和格式初始化Bitmap类的新实例     using (Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb))    {     //从指定的Image对象创建新Graphics对象      using (Graphics graphics = Graphics.FromImage(bitmap))     {      //清除整个绘图面并以透明背景色填充       //graphics.Clear(Color.Transparent);      //在指定位置并且按指定大小绘制原图片对象       graphics.DrawImage(resourceImage, new Rectangle(0, 0, width, height));     }     data = new Bitmap(bitmap);    }    return data;   }   catch (Exception e)   {    throw e;   }  }  ///   /// 比较两个值,得到给到给定值(判断是否越界)  ///   /// 总长度  /// 指定长度  ///   public int GetSize(int total, int width)  {   if (total > width)   {    return width;   }   else   {    return total;   }  }  ///   /// 更加传入的值计算得到新值(计算点坐标)  ///   /// 总长度  /// 指定长度  ///   private int GetValue(int total, int width)  {   return (total - width) / 2;  }  ///   /// 在图片上画出文字  ///   /// 图片对象  /// 文字x坐标  /// 文字y坐标  /// 文字内容  /// 文本宽度  /// 文本高度  private static void DrawStringWord(Graphics g, int pointX, int pointY, string word, int textWidth, int textHeight, int fontSize = 30)  {   Font font = new Font("微软雅黑", fontSize, (FontStyle.Regular));   RectangleF textArea = new RectangleF(pointX, pointY, textWidth, textHeight);   Brush brush = new SolidBrush(Color.Black);   g.DrawString(word, font, brush, textArea);  }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...