叠加两个或多个位图以在 Picturebox 中显示 (C#)

2024-02-24

在我的 C# 程序中,我有一个 Picturebox,我想在其中显示视频流(连续帧)。我收到原始数据,然后将其转换为位图或图像。我可以一次显示一张图像,没有问题(重现视频流)。

现在我的问题是我想要合并 2 个或多个具有相同大小和 alpha 值 (ARGB) 的位图(如图层)并将其显示在图片框上.

我在这里阅读了很多关于 SO 的网站和帖子,但很多都使用 Graphics 类,而我只是无法在我的应用程序上绘制它(很可能是因为我是 C# 新手!并且已经有了我的程序设置,所以我不想改变结构)。

我需要什么(知道):

  1. 如何用 alpha 值叠加两个或多个位图;
  2. 请不要进行像素操作,无法承担这样的性能成本。

提前非常感谢!

NOTE:我认为这个问题不应该被标记(或关闭)为重复,因为我在 SO 中找到的所有内容都是通过像素操作或通过 Graphics 类完成的。 (但我可能是错的!)

编辑:可能的解决方法(不是问题的解决方案)
In 图片框问题 https://stackoverflow.com/questions/4144371/a-picturebox-problem,第四个答案(来自用户 comecme)告诉我有 2 个图片框,一个在另一个上面。为了使其与这种方法一起工作,我必须做的唯一(额外)事情是:

private void Form1_Load(object sender, EventArgs e)
{
    pictureBox2.Parent = pictureBox1;
}

其中 pictureBox2 将位于顶部。

我不会认为这是这个问题的答案,因为我认为这是一种解决方法(特别是因为拥有超过 10 个图片框似乎并不理想!哈哈)。这就是为什么我会留下这个问题等待real回答我的问题。

编辑:解决了!检查我的答案。


这里是real回答我的问题。
1)使用List<Bitmap>存储您想要混合的所有图像;
2)创建一个新的Bitmap来保存最终的图像;
3)在最终图像之上绘制每个图像graphics使用using陈述。

代码:

List<Bitmap> images = new List<Bitmap>();  
Bitmap finalImage = new Bitmap(640, 480);

...

//For each layer, I transform the data into a Bitmap (doesn't matter what kind of
//data, in this question) and add it to the images list
for (int i = 0; i < nLayers; ++i)
{
    Bitmap bitmap = new Bitmap(layerBitmapData[i]));
    images.Add(bitmap);
}

using (Graphics g = Graphics.FromImage(finalImage))
{
    //set background color
    g.Clear(Color.Black);

    //go through each image and draw it on the final image (Notice the offset; since I want to overlay the images i won't have any offset between the images in the finalImage)
    int offset = 0;
    foreach (Bitmap image in images)
    {
        g.DrawImage(image, new Rectangle(offset, 0, image.Width, image.Height));
    }   
}
//Draw the final image in the pictureBox
this.layersBox.Image = finalImage;
//In my case I clear the List because i run this in a cycle and the number of layers is not fixed 
images.Clear();

积分转到布兰登坎纳迪 in 这个 tech.pro 网页 https://web.archive.org/web/20130214003927/http://tech.pro/tutorial/921/combining-images-with-csharp.

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

叠加两个或多个位图以在 Picturebox 中显示 (C#) 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • 使用 PostgreSQL 编译静态 Qt 5.10.0 时出错

    我正在尝试在 Windows 7 上使用 mingw 编译 Qt 5 10 0 和 PostgreSQL 10 或 9 2 但同样的错误 但是 当我包含 psql include 和 lib 目录时 在 mingw32 make 之后我总是
  • jQuery 获取表的当前 rowIndex

    单击时我的表格单元格会突出显示 我需要找到突出显示的单元格的 rowIndex 我尝试这样做 ui state highlight index Results to 0 我也尝试过这个 td click function var row i
  • Next js 网站的重新加载重定向到 Apache 服务器上的主页

    我有一个静态的 Next js 网站托管在 Apache 服务器 控制面板 上 起初当我重新加载页面时 它给了我一个 404 错误 但现在当我重新加载时 它总是转到主页 我尝试包含 htaccess文件放在我的公共文件夹中 但它不起作用 这
  • 如何使用 JSON 对象初始化 TypeScript 对象?

    我从对 REST 服务器的 AJAX 调用接收到一个 JSON 对象 该对象具有与我的 TypeScript 类匹配的属性名称 这是这个问题 https stackoverflow com questions 22875636 how do
  • Laravel 迁移到 mix 会删除无效的 NODE_OPTIONS 环境变量:不允许 --openssl-legacy-provider

    当我运行yarn run dev时 它编译没有任何问题 但是当我运行yarn run prod时 出现以下错误 Mix Compiled with some errors in 21 47s ERROR in js app js js ap
  • Selenium Webdriver C# element.Enabled 当元素仍处于禁用状态时评估为 true

    我的自动化测试过去运行顺利 但我们将 QA 环境移至不同的服务器 现在测试失败 因为它不断尝试单击仍在加载且变灰 禁用的元素 以下是在以前的服务器上运行良好的部分代码 while less than 7 seconds if driver
  • Angular2/Ionic2 中的 Google Drive APIgapi.client.drive

    我编写 Angular2 Ionic2 应用程序来显示列表并将文件上传到 Google Drive 使用 Google 登录工作正常 但是gapi client drive未定义 我应该做什么来解决它或者有方法代替 我安装了 npm ins
  • 重用意图安全吗?

    Android 文档将 Intent 定义为 包含要执行的操作的抽象描述的信息包 这表明您应该能够在需要时多次重用单个 Intent 对象 但我还没有看到任何示例表明这种情况 可以安全执行 是否有任何理由不执行以下操作 private fi
  • C# 运行时错误:“DataGridViewComboBoxCell 值无效”

    我花了一天的大部分时间来解决这个问题 但解决方案仍然困扰着我 我的 Winform 应用程序包含一个DataGridView其中两列是ComboBox下拉列表 奇怪的是 DataGridView似乎填充正确 但在填充时或每当有鼠标悬停或看似
  • 仅运行 ansible playbook 中的一项任务和处理程序

    如何从 Ansible playbook 运行单个任务以及在该任务成功完成时收到通知的处理程序 同时跳过相关 playbook 中的所有其他任务 目前我执行以下操作 ansible playbook start at task task1
  • 在空手道和放心之间选择

    尝试在 Karate 框架和 Rest Assured 之间进行选择以实现 API 自动化 其中包括 Rest API 和 GraphQL 我们还可以增强框架来执行 UI 自动化 我经历了寻找的一般过程 Karate 是为 GraphQL
  • Google Drive API 进度条错误

    我编写了以下代码来将文件上传到我的 Google 云端硬盘帐户 它工作得很好 然后我尝试添加一些上传进度跟踪器 但遇到了一些问题 它可以工作 但进度几乎立即达到 100 远远早于上传完成 export async function uplo
  • 使用常量引用删除引用

    对于参数类 C 我希望始终获得 原始 类型 而不管指针 const 或引用修饰符如何 template
  • (gcloud.app.deploy) 错误响应:[13] 意外错误

    当我尝试将 Spring Boot 应用程序部署到谷歌云时 出现以下错误 gcloud app deploy Error Response 13 Unexpected Error 我正在使用 com google cloud tools a
  • 提交PHP后保留表单中的值

    我从控制器调用这些函数来获取表单和表单中的值 我的问题是 提交失败后如何保留表单中的值 我尝试过这样的事情
  • Apache Spark 在分区数量较少时内存不足

    我有一个Spark应用程序总是内存不足 集群有两个节点 RAM大约30G 输入数据大小大约几百GB 该应用程序是一个 Spark SQL 作业 它从 HDFS 读取数据并创建一个表并缓存它 然后执行一些 Spark SQL 查询并将结果写回
  • C libpcap API 提取 DNS 查询

    我正在尝试使用 libpcap api 从捕获的 DNS 数据包中提取 DNS 查询 但是我的结构一定有问题 在最后一次转换 使用结构问题 之后char name指针指向正确的地址 查询名称的开头 但它只包含 42 45 20 00 但应该
  • 向客户端发送数据(数据是一个有大原型的对象)

    想要更新一个使用迄今为止创建的所有聊天室列表登录的新客户端 假设我做了这样的事情 每次有人加入应用程序时 socket emit updateClient rooms rooms是一个对象 由许多组成room的实例Room对象本身很小 但有
  • 如何将数据导入rails?

    我有一个带有 User 类的 Rails 3 应用程序 以及一个我想要导入的制表符分隔的用户文件 如何在 Rails 控制台之外访问 Active Record 模型 以便我可以编写脚本来执行以下操作 require active reco
  • 叠加两个或多个位图以在 Picturebox 中显示 (C#)

    在我的 C 程序中 我有一个 Picturebox 我想在其中显示视频流 连续帧 我收到原始数据 然后将其转换为位图或图像 我可以一次显示一张图像 没有问题 重现视频流 现在我的问题是我想要合并 2 个或多个具有相同大小和 alpha 值