using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Net.Http; namespace SiteApp.BLL.Common
{
public class ImageHelper
{
/// <summary>
/// 获取网络路劲的图片
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static Image GetHttpImage(string url)
{ var client = new HttpClient(); var uri = new Uri(Uri.EscapeUriString(url));
byte[] urlContents = client.GetByteArrayAsync(uri).Result; using (var ms = new System.IO.MemoryStream(urlContents))
{
return Image.FromStream(ms);
}
} /// <summary>
/// 将Base64字符串转换为Image对象
/// </summary>
/// <param name="base64Str">base64字符串</param>
/// <returns></returns>
public static Bitmap Base64StrToImage(string base64Str)
{
Bitmap bitmap = null; try
{
byte[] arr = Convert.FromBase64String(base64Str);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
ms.Close();
bitmap = bmp;
}
catch (Exception ex)
{
} return bitmap;
} /// <summary>
/// 图片加字
/// </summary>
/// <param name="old"></param>
/// <param name="text"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public static Bitmap ImgDrawString(Bitmap old,string text,int x,int y)
{
#region 图片加字 Bitmap bmp = new Bitmap(old); Graphics g = Graphics.FromImage(bmp); Font font = new Font("宋体", 15);
SolidBrush sbrush = new SolidBrush(Color.Black);
g.DrawString(text, font, sbrush, new PointF(x, y));
MemoryStream ms = new MemoryStream(); #endregion return bmp;
} /// <summary>
/// 图片加矩形
/// </summary>
/// <param name="old"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public static Bitmap ImgDrawRectangle(Bitmap old,int x,int y,int width,int height)
{
Bitmap bmp = new Bitmap(old); #region 矩形 Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(Color.Black);
Pen pen = new Pen(brush, 1);
pen.DashStyle = DashStyle.DashDot; g.DrawRectangle(pen, new Rectangle(x, y, width, height)); g.Dispose(); #endregion return bmp;
} /// <summary>
/// 图片加圆
/// </summary>
/// <param name="old"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public static Bitmap ImgDrawEllipse(Bitmap old, int x, int y, int width, int height)
{
Graphics g = Graphics.FromImage(old); Brush brush = new SolidBrush(Color.Black);
Pen pen = new Pen(brush, 1);
pen.DashStyle = DashStyle.DashDot; g.DrawEllipse(pen, new Rectangle(x, y, width, height)); g.Dispose(); return old; } /// <summary>
/// 图片加线
/// </summary>
/// <param name="old"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="x1"></param>
/// <param name="y1"></param>
/// <returns></returns>
public static Bitmap ImaDrawLine(Bitmap old, int x, int y, int x1, int y1)
{ Graphics g = Graphics.FromImage(old); Brush brush = new SolidBrush(Color.Black); Pen pen = new Pen(brush, 1); pen.DashStyle = DashStyle.DashDot; g.DrawLine(pen, x, y, x1, y1); g.Dispose(); return old;
} /// <summary>
/// 图片根据XY修改RGB
/// </summary>
/// <param name="old"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="r"></param>
/// <param name="g"></param>
/// <param name="b"></param>
/// <returns></returns>
public static Bitmap ImaDrawPixel(Bitmap old, int x, int y, int r, int g, int b)
{
var rgb = old.GetPixel(x, y); old.SetPixel(x, y, Color.FromArgb(r, g, b)); return old;
} }
}

调用方式

Bitmap image = (Bitmap)ImageHelper.GetHttpImage(newInfraredList[i].ImgBase64);// 这里是HTTP:// 开头的图片路劲

var img = ImageHelper.Base64StrToImage(entity.ImgBase64);

var newImg = ImageHelper.ImgDrawString(newImg, $"最高温度:{ list[b].Max}°C,最低温度:{ list[b].Min}°C", x - 10, y - 10);

var newImg = ImageHelper.ImgDrawRectangle(image, x, y, width, height);

var newImg = ImageHelper.ImgDrawEllipse(image, x, y, width, height);

var newImg = ImageHelper.ImaDrawLine(image, x, y, x1, y1);

var bmpTemp = ImageHelper.ImaDrawPixel(bmp,0,0,255,255,255); 

最后图片重绘的效果如下:

C# 重绘图片.图片加字,加矩形,加圆,加线,根据XY坐标修改RGB的更多相关文章

  1. DOM 操作成本究竟有多高,HTML、CSS构建过程 ,从什么方向出发避免重绘重排)

    前言: 2019年!我准备好了 正文:从我接触前端到现在,一直听到的一句话:操作DOM的成本很高,不要轻易去操作DOM.尤其是React.vue等MV*框架的出现,数据驱动视图的模式越发深入人心,jQ ...

  2. 【JS】313- 复习 回流和重绘

    点击上方"前端自习课"关注,学习起来~ 原文地址:我不是陈纪庚 segmentfault.com/a/1190000017329980 回流和重绘可以说是每一个web开发者都经常听 ...

  3. 上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片

    原文:上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片 我们知道,如果网站上传图片时,如果用户上传的是CMYK图片,那么在网站上将是无法显示的,通常的现象是出现一个红叉.下面使用将Ima ...

  4. 继承UIView的初始化 、重绘、以及绘制图片

    大家对于UIViewController的生命周期都相当了解了.但是对于继承UIView的子类能做什么,却很少有文章介绍的. 1.  -initWithFrame:(CGRect)rect是view指 ...

  5. Vue动态加载图片图片不显示

    图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...

  6. xp系统重绘边框线不显示(首次加载没有触发paint事件)

    同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等 ...

  7. php 移动或重命名文件(图片)到另一目录下的方法有多种,这里只列出三种:

    php 移动或重命名文件(图片)到另一目录下的方法有多种,这里只列出三种:       方法一:使用copy函数   格式:copy(source,destination)   将文件从 source ...

  8. bootstrap设计横线上加字

    1.给横线上加字 . 2.思路:通过z-index实现,可以将父元素的z-index设置成2,而横线的z-index设置成-1,这样有字的地方就可以覆盖横线,再设置字的padding达到合理的宽度 ( ...

  9. VC++中关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别

    而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息. OnDraw()是CVIEW的成员函数,并且没有响应消息的功能.这就是为什么你用VC成的程序代码时,在视图类只有OnDraw ...

  10. 关于DOM的操作以及性能优化问题-重绘重排

     写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...

随机推荐

  1. 基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统

    简介 TANSCI 基于 SpringBoot + Vue3.2 + Element Plus 的后台管理系统. 包含基础模块:菜单管理.角色管理.组织管理.用户管理.字典管理.日志管理(操作日志.异 ...

  2. 入门 shell 从脚本开始 - lazy_find

    编写脚本实现在指定文件路径下查找文件夹或文件名.   脚本如下: #!/bin/sh # lazy find # GNU All-Permissive License # Copying and di ...

  3. xshell配置隧道转移规则

    钢铁知识库,一个学习python爬虫.数据分析的知识库.人生苦短,快用python. xshell是什么 通俗点说就是一款强大ssh远程软件,可以方便运维人员对服务器进行管理操作,功能很多朋友们自行探 ...

  4. 如何使用ps抠图(两种扣图方法)

    PS抠图的方法有很多种,以下是其中两种常用的方法: 方法一:适用于背景颜色单一.较为简单的图片. 选中魔棒工具/魔术橡皮擦,点击背景,出现选区,点击Delete键删除. 点击快速选择工具,沿着所需图形 ...

  5. Linux-服务管理-service-checkconfig

  6. [转帖]Web技术(七):如何使用并实现MQTT 消息订阅-发布模型?

    文章目录 一.什么是发布-订阅消息模型? 二.订阅-发布消息模型有哪些应用? 2.1 应用于IP 物联网络中的消息传递 2.2 应用于操作系统进程间的消息传递 2.3 应用于MESH 自组网中的消息传 ...

  7. [转帖]事务上的等待事件 —— enq: TX - contention

    TX锁是保护事务的,事务结束时便会释放.因此,为获得TX锁为等待的会话,要等到拥有锁的会话的事务结束为止. SQL> select name,parameter1,parameter2,para ...

  8. [转帖]Titan 配置

    https://www.bookstack.cn/read/TiDB-4.0/storage-engine-titan-configuration.md 开启 Titan Titan 对 RocksD ...

  9. megacli_sw服务器Raid卡的设置过程

    megacli_sw服务器的设置过程 背景 采购的申威服务器有四块硬盘, 第一台服务器在sdd上面安装了一个银河麒麟v10的系统 sda,sdb,sdc 三块硬盘没有进行raid设置, 直接还是用的J ...

  10. [转帖]Innodb存储引擎-备份和恢复(分类、冷备、热备、逻辑备份、二进制日志备份和恢复、快照备份、复制)

    文章目录 备份和恢复 分类 冷备 热备 逻辑备份 mysqldump SELECT...INTO OUTFILE 恢复 二进制日志备份与恢复 快照备份(完全备份) 复制 快照+复制的备份架构 备份和恢 ...