C# - 将文本与图像合并

2024-01-04

我编写了以下代码来合并 2 个图像。我的需求很简单,图像始终具有相同的尺寸,因此不需要定位。我可以稍后处理这个问题...我想知道的是,我可以修改它以将文本标签作为我的 imgFront 合并到图像 imgBack 上吗?最后返回的结果将是一个新图像,上面有我的文本。

这可能吗?如何?

public static byte[] ImageMerge(Image imgBack, Image imgFront, Int32 width = 200, Int32 height = 200)
{
    using (imgBack)
    {
        using (var bitmap = new Bitmap(width, height))
        {
            using (var canvas = Graphics.FromImage(bitmap))
            {
                canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
                canvas.DrawImage(imgBack, new Rectangle(0, 0, width, height), new Rectangle(0, 0, width, height), GraphicsUnit.Pixel);
                canvas.DrawImage(imgFront, new Rectangle(0, 0, width, height), new Rectangle(0, 0, width, height), GraphicsUnit.Pixel);
                canvas.Save();
            }
            try
            {
                return ImageToByte(bitmap);
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}

这是完成的代码。我不敢相信我没有早点分享!

public static byte[] ImageTextMerge(Image imgBack, string str, Int32 x, Int32 y, Int32 w, Int32 h, Int32 width = 200, Int32 height = 200)
{
    using (imgBack)
    {
        using (var bitmap = new Bitmap(width, height))
        {
            using (var canvas = Graphics.FromImage(bitmap))
            {
                canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
                canvas.DrawImage(imgBack, new Rectangle(0, 0, width, height), new Rectangle(0, 0, width, height), GraphicsUnit.Pixel);

                // Create font and brush
                Font drawFont = new Font("Arial", 20);
                SolidBrush drawBrush = new SolidBrush(Color.Black);

                // Create rectangle for drawing. 
                RectangleF drawRect = new RectangleF(x, y, w, h);

                // Draw rectangle to screen.
                Pen blackPen = new Pen(Color.Transparent);
                canvas.DrawRectangle(blackPen, x, y, w, h);

                // Set format of string.
                StringFormat drawFormat = new StringFormat();
                drawFormat.Alignment = StringAlignment.Near;

                // Draw string to screen.
                canvas.DrawString(str, drawFont, drawBrush, drawRect, drawFormat);
                canvas.Save();
            }
            try
            {
                return ImageToByte(bitmap);
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 将文本与图像合并 的相关文章

  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 命令行批量图像裁剪工具

    有没有可以处理多种格式的轻量级命令行批量图像裁剪工具 Linux或Windows 在 Linux 中你可以使用 mogrify crop Width x Height X Y repage image png 用于 CLI 图像处理
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐

  • Hibernate 合并不会删除 OneToMany 旧实体

    我有以下实体 Seminar class Entity Table name seminars public class Seminar Id GeneratedValue private int id OneToMany cascade
  • Windows 凭据提供程序实施

    这是与 Windows 凭据提供程序实施相关的问题 我想跟进这个问题 我们有一个自定义 MFA 解决方案 它会在 Windows 完成身份验证后提示输入 SMS PIN 然后再让用户进入 不幸的是 在 Windows 2016 和 Wind
  • 在 mstest 中运行测试而无需编译/构建

    有办法吗 每次开始测试时都必须等待构建吗 我想从 Visual Studio 构建而不是从测试构建 thanks 任何时候你的代码发生变化并且你运行你的测试时 它都会进行构建 所以从技术上讲 你可以一遍又一遍地运行你的测试 它们只会第一次构
  • 如何使用 Room Db 返回 Rx Single 交易?

    假设有一个Dao类具有以下两个方法 1 delete items List
  • Phonegap 桌面无法正常启动..不断加载

    我已经在Windows 7 64位 上安装了phonegap桌面v 0 3 0 我的问题得到解决 从下面的链接下载新版本 0 3 1 并安装 https github com phonegap phonegap app desktop re
  • 如何在 iOS 中检测颜色并打印其名称?

    如何检测图像 摄像机上的主色并打印其名称 例如 在图像中可能会有非常浅的蓝色 浅蓝色 蓝色 深蓝色 只是因为该物体或图像上的闪电 当我分析该图像时 我想让我知道主色是蓝色 并打印 蓝色 在屏幕上 如果我需要使用 RGB 我想我需要颜色范围
  • 如何在 Posix 上使用 C 创建具有正确权限的目录

    我正在尝试编写一个简单的 C 程序来创建目录 mkdir 克隆 这是我到目前为止所拥有的 include
  • 如何使用 vb.net 将超链接放入电子邮件正文

    我想做的是在 vb net 中添加一个到电子邮件正文的超链接 当我发送电子邮件时 我收到的是链接文本 以下是我到目前为止所做的事情 任何帮助将非常感激 Accepts two parameters the username and pass
  • 在 Neo4j 中创建一个具有除 ID 之外的唯一属性的节点

    我的项目基于 Spring boot Neo4j 我正在尝试创建一个新的权限节点 但不想重复权限 现在我有一个 UserRole 节点 它保存List
  • 使用基于 Java 的配置在服务器模式下设置 H2

    我有 spring XML 它使我能够使用以下配置以服务器模式启动 H2 数据库
  • 在 Android Studio 中设置 Hello, World 手表应用时遇到问题

    在 Android Studio 中部署包含的 Hello World 手表应用程序的可穿戴版本时 我收到此错误 失败 INSTALL FAILED OLDER SDK Update 从 Reddit 帖子中删除有关尝试 L 的黑客版本的详
  • 是否值得将distinct() 与collect(toSet()) 一起使用

    将流的元素收集到集合中时 同时指定是否有任何优点 或缺点 distinct 在流上 例如 return items stream map distinct collect toSet 考虑到该集合已经删除了重复项 这似乎是多余的 但是它是否
  • Javascript 检测 mouseup 上按住的控制键

    我查了很多资料 似乎找不到满意的解决方案 我希望有人能帮帮忙 当我使用 jQuery 时 我还编写了数千行 JavaScript 所以 纯 JavaScript 解决方案就可以了 我正在尝试确定控制键是否被物理按住mouseup事件 就是这
  • 如果 LINQ 中的列为空,如何忽略“where”和“order by”条件

    我有交易对象列表 并希望根据当前用户所在的视图按特定条件对它们进行排序 我遇到的问题是 为了在 where 子句中添加条件 首先我需要检查它是否为空以防止空指针异常 这会导致列为 null 的记录被过滤掉 我想将它们包含在列表底部 如果该列
  • 如何从“Android终端模拟器”调用Rebol解释器?

    我需要从以下位置调用 Rebol 语言解释器作为运行脚本文件的命令 例如rebol script name reb 所以我不是在寻找仅在 Rebol 中启动的 APK 应用程序REPL http en wikipedia org wiki
  • 使用 Google Closure 的 @typedef 标签

    Google 的 Closure 编译器有一个 typedef 标签 但是可以在代码中使用它们吗 我知道它会起作用 但是它会让人皱眉吗 所以这是我的类型 The plan object s typedef typedef Object Ty
  • C# ListView显示

    伙计们 我是在 C 中实现 ListView 的初学者 我在 c net 中的这些代码遇到问题 我无法弄清楚输出显示的控件中发生了什么 看来我忘记了在 ListView 控件的属性中赋予值的内容 第二列值必须出现在第一列上 这是我的代码 u
  • 字符串初始化的区别

    首先 如果这是一个非常基本的问题 我很抱歉 我只是想知道以下字符串定义之间的区别 String x hello String y new String hello 我知道在 java 中 String 是一个类 它既不是原语也不是包装器 如
  • 如何更改 WCF 服务引用的地址?

    我有一个在内部使用的应用程序 并使用 WCF 在客户端和服务器部分之间进行通信 但是它很快需要部署到服务器名称不同的站点 WCF 服务使用 netTcp 绑定作为 Windows 服务托管 目前 服务的地址是使用 Visual Studio
  • C# - 将文本与图像合并

    我编写了以下代码来合并 2 个图像 我的需求很简单 图像始终具有相同的尺寸 因此不需要定位 我可以稍后处理这个问题 我想知道的是 我可以修改它以将文本标签作为我的 imgFront 合并到图像 imgBack 上吗 最后返回的结果将是一个新