从 BitmapSource 中删除 Alpha

2024-03-02

我使用 BitBlt() 和 CreateBitmapSourceFromHBitmap() 将窗口捕获为 BitmapSource,可以将其显示在 WPF 应用程序中的 Image 元素上。但由于某种原因,它捕获的大部分应用程序都是透明的。这是正在发生的事情的源与捕获图像:

https://userpages.umbc.edu/~smyth1/images/screencap.PNG
(source: umbc.edu https://userpages.umbc.edu/~smyth1/images/screencap.PNG)

它是灰色的,因为它所在的窗口的背景是灰色的。无论我给窗口设置什么背景都会显示出来。

如何才能让拍摄的图像更准确地反映原始图像?


您的代码中的问题可能是由于您使用的 Win32 API (CreateCompatibleDC, SelectObject, CreateBitmap...)。我尝试使用更简单的代码,仅使用GetDC and BitBlt,它对我来说效果很好。这是我的代码:

    public static Bitmap Capture(IntPtr hwnd)
    {
        IntPtr hDC = GetDC(hwnd);
        if (hDC != IntPtr.Zero)
        {
            Rectangle rect = GetWindowRectangle(hwnd);
            Bitmap bmp = new Bitmap(rect.Width, rect.Height);
            using (Graphics destGraphics = Graphics.FromImage(bmp))
            {
                BitBlt(
                    destGraphics.GetHdc(),
                    0,
                    0,
                    rect.Width,
                    rect.Height,
                    hDC,
                    0,
                    0,
                    TernaryRasterOperations.SRCCOPY);
            }
            return bmp;
        }
        return null;
    }

我在 Windows 窗体和 WPF 中尝试过(使用Imaging.CreateBitmapSourceFromHBitmap),对于同一个屏幕截图(Firefox 中的 SO 页面),这两种情况都可以正常工作。

HTH,

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

从 BitmapSource 中删除 Alpha 的相关文章

  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • 将列表数组中的值绑定到列表框

    任何机构都可以给出一个简短的示例 用于将列表数组中的值绑定到 c net 中的列表框 这取决于您的列表数组的情况 让我们从一个简单的示例开始 List
  • 在 C++ 中,当我将值传递给函数时,它是否总是转换为适当的类型?

    如果我有一个像这样的函数void func size t x 我称该函数为func 5 5 立即转换为size t类型 这通常适用于所有类型吗 我问这个问题是因为我发誓我见过人们编写代码 他们做类似的事情func 5 0 将 5 作为双精度
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

    我正在尝试在 net core 3 MVC 项目中使用 Blazor 我使用了一些教程来做到这一点 例如https fizzylogic nl 2019 08 18 integrating blazor in an existing asp
  • 为什么不能使用initializer_list来初始化unique_ptr的向量? [复制]

    这个问题在这里已经有答案了 我想知道为什么initializer list 不能与unique ptr 一起使用 std vector
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • 不能使用函数名称距离

    以下代码可以正常编译 include
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • 在 C++ 中初始化指针

    可以在声明时将指针分配给值吗 像这样的东西 int p 1000 是的 您可以在声明时初始化指向值的指针 但是您不能这样做 int p 1000 是个地址运算符 并且您不能将其应用于常量 尽管如果可以 那会很有趣 尝试使用另一个变量 int
  • 二维数组的列求和

    我有一个IEnumerable
  • Xamarin.Android JmDNS 绑定问题

    我开始研究 Xamarin Android 的 JmDNS 绑定 我设法构建了绑定 但无法从代码中引用它 https github com ytn3rd monodroid bindings tree master JmDNS https
  • 更改成员资格、角色等的默认连接字符串

    默认情况下 我的网络应用程序似乎正在使用LocalSqlServer作为用于任何应用程序服务 例如成员资格 角色 身份验证 等 的连接字符串 有什么方法可以更改默认连接字符串应该是什么 默认值是 LocalSqlServer 似乎很随意 我
  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • 使用 JavaScript 从 Amazon Cognito API 中详尽选择所有用户的安全且可扩展的方法是什么?

    我是一个小团队的一员 在一个相当小的网站上工作 该网站拥有用户帐户 此时大约有100名用户 我们正在使用 Amazon Cognito 进行用户管理 我们的网站上有一个摘要页面 其中显示所有用户和各种属性的列表 表格 然而 有一个硬性限制
  • 使用 Go 和 Cloudformation 部署 AWS Lambda

    我正在自动部署基于 Go 的 AWS Lambda 但遇到了问题 我的 AWS 无服务器模板是 AWSTemplateFormatVersion 2010 09 09 Transform AWS Serverless 2016 10 31
  • 鼠标滚轮在容器内滚动 - 捕获事件

    我有一个带有内部可滚动 DIV 的页面 当我将鼠标悬停在它上面并尝试用鼠标滚轮滚动它时 该 DIV 的内容会根据需要滚动 而主页保持不变 但是当我到达 DIV 滚动区域的底部时 整个页面开始滚动 我尝试在该 div 上设置事件处理程序 但是
  • 如何在松散耦合的应用程序中将状态信息传递到 GUI

    我第一次尝试使用依赖注入来松散地耦合一个新应用程序 我的问题是如何将状态信息传递回用户 在过去 所有代码都塞进 GUI 中 虽然非常混乱且难以维护 但非常容易 课程的安排是这样的 请不要检查我的 UML 技能 它们不存在 如果我们走右手边
  • Google AMP 脚本与 jquery window.scroll 冲突

    我正在尝试遵循 Google 建议的 AMP 指南 ampproject org https www ampproject org 但是一旦我添加了他们的 js 脚本 jQuery 滚动就停止工作 有谁知道为什么以及如何解决它 AMP HT
  • 如何在 VS 单元测试中包含示例数据文件?

    我想要针对示例 XML 文件运行单元测试 我应该如何将这些文件暴露给单元测试 我尝试过使用内容构建操作 但我无权访问应用程序上下文 因此 GetContentStream 已退出 我知道我可以将 DataContext 用于 SQL 数据库
  • Setter 目标名称无法识别

    我是 WPF 的初学者 我尝试使用 DataTrigger 编写 WPF 部分 这里需要逻辑 If the variable iBottleCount gt 10 then make the background of a label gr
  • 我何时以及为什么应该清理 XCode 中的构建

    每隔一段时间 解决 XCode 中严重问题的方法就是点击 Product Clean 这似乎会清除一些缓存 问题就会消失 但它实际上在做什么 更重要的是 我应该什么时候这样做 在处理核心数据时似乎更频繁地需要它 但我并没有真正跟踪它 作为一
  • 基于比较的排序技术的局限性

    大多数需要对数据进行排序的场景都会选择比较排序 合并排序 快速排序 插入排序和其他比较排序等技术可以处理不同的数据类型 并且效率的下限为 O nLog n 我的问题是 基于比较的排序技术有任何限制吗 有哪些场景会使用非比较排序技术 chee
  • 将两个现有地块合并为一个地块

    我还没有真正尝试过任何方法来做到这一点 但我想知道是否有一种方法可以将已经存在的两个图合并到一个图中 任何投入将不胜感激 这是一个完整的最小工作示例 它介绍了从多个图中提取和组合数据所需的所有步骤 import numpy as np im
  • Javax Websocket 由于非法 UTF-8 序列而关闭

    我正在使用 javax websocket API 用 Ja va 编写一个 Websocket 客户端 并且org glassfish tyrus作为实施 通常一切正常 但有时 当我收到非常大的字符串时 连接会以神秘的 非法 UTF 8
  • 如何向 Code::Blocks 编译器添加 C++11 支持?

    我正在编写一些代码 需要 C 11 支持我的 Code Blocks 12 11 我使用的是 MingW 附带的默认 GNU GCC 编译器 我有什么办法可以做到这一点吗 Go to Toolbar gt Settings gt Compi
  • 在代码隐藏中为 xaml 元素设置多重绑定

    我有以下有效的 XAML 代码 它基本上绑定了几个属性来计算用户控件的最终位置
  • 添加自定义 Video.js 控制栏按钮

    我已经在 video js 上工作了大约一天 所以对于这个东西我是一个真正的新手 今天我只想添加一个在两个视频之间切换的按钮 我用 jQuery 快速简单地完成了它 但我宁愿用 javascript 来更好地理解 video js 的整体
  • Linux vi 箭头键在插入模式下损坏

    我的箭头键在家里的插入模式下的 vi 中不起作用 它们只是插入一个换行符和一个大写字母 例如 A 有办法解决这个问题吗 我猜你正在使用 vim 因为它被标记为 Linux 尝试 set nocompatible 您可能想通过添加此命令来配置
  • 错误:原因:com.android.sdklib.repository.FullRevision

    我想尝试从 AS 2 0 即时运行 为此 我必须将构建插件更新为 2 0 0 alpha6 但执行此操作时 我无法再对项目进行 gradle 同步 因为我得到 Gradle myProject 项目刷新失败 错误 原因 com androi
  • Python:未检测到已安装的 selenium 包

    我正在使用Anaconda http continuum io downloadspython 发行版并想使用selenium http selenium googlecode com svn trunk docs api py index
  • 如何在Python中获取线程id?

    我有一个多线程Python程序和一个实用函数 writeLog message 写出时间戳 后跟消息 不幸的是 生成的日志文件没有给出哪个线程正在生成哪个消息的指示 我想writeLog 能够在消息中添加一些内容来识别哪个线程正在调用它 显
  • 如何在 RSAParameters 上设置用于 RSACryptoServiceProvider 的公钥和私钥?

    我在网上阅读了一些教程 并生成了公钥和私钥 但是如何将它们设置为在 C 中使用 这是我所拥有的 string publicKey string privateKey UnicodeEncoding ByteConverter new Uni
  • 从 BitmapSource 中删除 Alpha

    我使用 BitBlt 和 CreateBitmapSourceFromHBitmap 将窗口捕获为 BitmapSource 可以将其显示在 WPF 应用程序中的 Image 元素上 但由于某种原因 它捕获的大部分应用程序都是透明的 这是正