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. Bash 常用命令总结

    基础常用命令 某个命令 --h,对这个命令进行解释 某个命令 --help,解释这个命令(更详细) man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索) ...

  2. Https 原理与工作流程及证书链校验

    本文为博主原创,未经允许不得转载: 目录 HTTP传输三大风险 安全通信原则 HTTPS定义 TLS/SSL 协议及加密算法 HTTPS工作流程 HTTPS协议和HTTP协议的区别 CA机构 证书链校 ...

  3. linux 安装配置 jdk8

    转载请注明出处: 1.下载 jdk 在 Linux 环境的安装包.可以在官网下载, 官网连接:https://www.oracle.com/java/technologies/javase/javas ...

  4. @JsonIgnore 失效没起作用及 @JSONField(serialize = false)

    项目中需要对接口返回的某一个字段进行屏蔽,返回给前端响应的时候,不显示某个字段. 第一时间想到在实体类屏蔽的属性字段上添加@JsonIgnore注解,但添加之后并没有起作用. 在网上搜索了下,使用 @ ...

  5. linux-帮助-man和help

  6. scikit-learn.datasets 机器学习库

    scikit-learn是一个用于Python的机器学习库,提供了大量用于数据挖掘和数据分析的工具.以下是对这些函数和方法的简要描述: clear_data_home: 清除数据集目录的内容. dum ...

  7. [转帖]vCenter使用 VMCA 续订证书:续订证书时发生意外错误

    https://www.dinghui.org/vcenter-sts-certificate.html 起因:有一处客户vCenter告警:STS签名证书即将过期. 处理办法:系统管理-证书-证书管 ...

  8. [转帖]kill 参数表

    https://www.cnblogs.com/alix-1988/p/14331898.html kill命令格式:kill -Signal pidpid是进程号,可以用 ps 命令查出 signa ...

  9. [转帖]【杂学第十二篇】oracledb_exporter监听oracle19c数据库出现libclntsh、ORA-12162、ORA-00942异常解决

    http://www.taodudu.cc/news/show-4845374.html docker run -d --name oracledb_exporter --restart=always ...

  10. [转帖]开源软件项目中BSD、MIT许可证合规问题探析

    https://www.allbrightlaw.com/CN/10475/3be2369275d19e9e.aspx   [摘要]本文将探析BSD开源许可证(Berkeley Software Di ...