叠加两个或多个位图以在 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#) 的相关文章

  • 如何在C++中生成非常大的随机数

    我想使用 C 生成 0 2 64 范围内的非常大的随机数 我已经使用了 rand 函数 但它没有生成非常大的数字 有人可以帮忙吗 使用c 11 使用标准c 11的随机库 http en cppreference com w cpp nume
  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • 如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

    我正在尝试编写一个控制器 该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用 但是 当我发出命令时var user await GetCurrentUserAsynch 在对 DBContext 的任何调
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • strtok() 使用安全吗[重复]

    这个问题在这里已经有答案了 我读到了很多负面的东西strtok 有人说它已经过时 有人说它不是线程安全的 等等 那么真相是什么 我可以使用吗strtok 它是线程安全的吗 Note 我正在使用 Visual C 您可以使用它 它是标准库的一
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 选择initializer_list迭代器定义

    Why std initializer list
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 使用 dateTimePicker 在 DataGridView 中编辑日期

    我有一个DateTime我的 WinForms 中的专栏DataGridView 目前只能通过手动输入日期来编辑该字段 例如 2010 09 02 需要什么才能拥有一个DateTimePicker 或同等 用作编辑器 DataGridVie
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac

随机推荐

  • 使用 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 值