在 WPF 中创建复合位图图像

2024-05-02

我有三个位图图像,我想将它们拼接在一起以创建合成图像。要拼接在一起的三个图像按以下方式对齐:

这些图像的类型为 System.Windows.Media.Imaging.BitmapImage。我看过以下内容solution https://stackoverflow.com/questions/14661919/merge-png-images-into-single-image-in-wpf,但它使用 System.Drawing.Graphics 来执行拼接。我发现每次我想将 BitmapImage 拼接在一起时将它们转换为 System.Drawing.Bitmap 是不直观的。

有没有一种简单的方法将 System.Windows.Media.Imaging.BitmapImage 类型的三个图像拼接在一起?


除了其他答案中描述的选项之外,下面的代码将三个 BitmapSource 拼接成一个 WriteableBitmap:

public BitmapSource StitchBitmaps(BitmapSource b1, BitmapSource b2, BitmapSource b3)
{
    if (b1.Format != b2.Format || b1.Format != b3.Format)
    {
        throw new ArgumentException("All input bitmaps must have the same pixel format");
    }

    var width = Math.Max(b1.PixelWidth, b2.PixelWidth + b3.PixelWidth);
    var height = b1.PixelHeight + Math.Max(b2.PixelHeight, b3.PixelHeight);
    var wb = new WriteableBitmap(width, height, 96, 96, b1.Format, null);
    var stride1 = (b1.PixelWidth * b1.Format.BitsPerPixel + 7) / 8;
    var stride2 = (b2.PixelWidth * b2.Format.BitsPerPixel + 7) / 8;
    var stride3 = (b3.PixelWidth * b3.Format.BitsPerPixel + 7) / 8;
    var size = b1.PixelHeight * stride1;
    size = Math.Max(size, b2.PixelHeight * stride2);
    size = Math.Max(size, b3.PixelHeight * stride3);

    var buffer = new byte[size];
    b1.CopyPixels(buffer, stride1, 0);
    wb.WritePixels(
        new Int32Rect(0, 0, b1.PixelWidth, b1.PixelHeight),
        buffer, stride1, 0);

    b2.CopyPixels(buffer, stride2, 0);
    wb.WritePixels(
        new Int32Rect(0, b1.PixelHeight, b2.PixelWidth, b2.PixelHeight),
        buffer, stride2, 0);

    b3.CopyPixels(buffer, stride3, 0);
    wb.WritePixels(
        new Int32Rect(b2.PixelWidth, b1.PixelHeight, b3.PixelWidth, b3.PixelHeight),
        buffer, stride3, 0);

    return wb;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WPF 中创建复合位图图像 的相关文章

  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 重载<<的返回值

    include
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 绝对位置在固定位置内不起作用

    div div div div Both main and inner集装箱取走position fixed 内胆的制作方法position absolute和主容器position fixed 你需要定义top right bottom
  • Javafx-场景快照不显示值和系列

    我制作了一个非常短的应用程序 它使用 javafx 生成图表 应用程序显示正确的值 图表 但当我做快照时 图像仅显示轴和标签 但不显示系列和值 stage setTitle Line Chart Sample final DateAxis
  • 使用 chrome canary 执行 selenium python 脚本时如何抑制控制台错误/警告/信息消息

    我正在使用 Chrome Canary 运行 python 脚本 下面的完整脚本链接 进行硒测试 测试似乎运行良好 但是 控制台上显示了大量错误 警告 信息消息 有没有办法抑制这些消息 我努力了 chrome options add arg
  • ToggleButton 控件 VisualStateManager:处理多个悬停状态

    参考我之前的问题 Silverlight MVVM 困惑 基于状态更新图像 https stackoverflow com questions 5034189 silverlight mvvm confusion updating imag
  • 带有“null”PendingIntent 的通知

    我正在尝试在 Android 中实现通知 现在我有一个问题 我不想再有一个PendingIntent该用户将打开任何Activity 我怎样才能做到这一点 PendingIntent contentIntent PendingIntent
  • 对于范围从 0 到最大值的 uint64_t 键,最佳哈希函数是什么?

    假设我们有一组元素并希望将它们存储在哈希映射中 例如std unordered set 并且每个元素都有一个 type 的键uint64 t其值可以从 0 到最大可能值变化 使用简单哈希函数 其中键的哈希值就是键本身 是最佳选择吗 它是否取
  • 可能的数独谜题的数量[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Wiki http en wikipedia org wiki Mathematics of Sudoku http en wikiped
  • 将 python scikit learn 模型导出到 pmml

    我想将 python scikit learn 模型导出到 PMML 中 什么 python 包最适合 我读到Augustus https github com opendatagroup augustus 但我找不到任何使用 scikit
  • 使用 $location 重定向到 AngularJS 中的新页面

    我正在使用以下 AngularJS location 进行测试 我不明白这有什么问题 只是想检查重定向是否有效 HTML Hello name
  • 求分数 a/b 的小数点后第 k 位,其中 a、b、k 是非常大的整数(小于 10e18)

    我的任务是找到分数 a b 小数点后第 k 位的数字 昨天我发现了这个算法 为了获取小数点后的任何数字 我生成一个名为 rem 的变量并进行循环 for int i 1 i lt k 1 i rem a b a rem 10 cout lt
  • 如何使用 OpenGL ES 2.0 旋转对象?

    在 OpenGL ES 1 1 中 您可以使用glRotatef 旋转模型 但 OpenGL ES 2 0 中不存在该函数 那么 在OpenGL ES 2 0中如何进行旋转呢 为了遵循克里斯蒂安所说的 您需要自己跟踪模型视图矩阵并操纵它来执
  • 如何在Vite配置中更改antd主题?

    是一个由Vite和React antd组成的项目 我想在 vite config ts 中动态处理 antd 主题 如果您能告诉我如何修改 React 组件中的 less modifyVars 值 我将不胜感激 这是当前屏幕 光状态 htt
  • Amazon DynamoDB 使用无服务器修改结构

    修改 DynamoDB 表结构的最佳方法是什么 由于备份而删除它没有问题 我有一个只有哈希键的表 我必须为表添加一个排序键 当我部署堆栈时 我收到此错误 错误 CloudFormation 模板无效 模板格式错误 模板的资源块中存在未解析的
  • MySQL存储过程错误意外字符“:”

    我有以下语句来创建存储过程 但我不断收到 位置 835 处出现意外字符 错误 语句中唯一的冒号位于 start loop 循环中 为什么我会收到此错误以及如何修复 DELIMITER CREATE DEFINER root localhos
  • 批处理文件中的 Powershell - 如何转义元字符?

    运行 Windows 7 当我复制文件在例程期间到外部磁盘文件备份 我使用 Powershell v2 从批处理文件 在副本文件上重新创建原始文件的所有时间戳 以下代码在大多数情况下都能成功运行 但并非总是如此 SET file 1 SET
  • Laravel Eloquent - 附加与同步

    有什么区别attach and sync 在 Laravel 4 的 Eloquent ORM 中 我试图环顾四周 但什么也没找到 附 处理多对多关系时插入相关模型 不需要数组参数 Example user User find 1 user
  • 如何在java中使用模式匹配器?

    假设字符串是我想提取xyz从字符串中出来 我用了 Pattern titlePattern Pattern compile lttitle gt s s lt title gt Matcher titleMatcher titlePatte
  • 从 s3 静态网站中的按钮触发 lambda

    我有一个静态网站 其中有一个包含几个字段的表单 CloudFront 位于将流量路由到站点的存储桶的前面 所涉及的表单自然有一个 POST 到 的按钮 有没有办法让按钮上的点击触发带有表单字段内容的 lambda 函数 提前致谢 API G
  • 破坏/分解函数的函数

    我以前有过 here https stackoverflow com questions 4920610 c class function in assembly 已经表明 C 函数不容易用汇编表示 现在我有兴趣以一种或另一种方式阅读它们
  • 在 WPF 中创建复合位图图像

    我有三个位图图像 我想将它们拼接在一起以创建合成图像 要拼接在一起的三个图像按以下方式对齐 这些图像的类型为 System Windows Media Imaging BitmapImage 我看过以下内容solution https st