如何将 CF_DIBV5 从剪贴板 (Format17) 转换为透明位图?

2023-12-01

GDI+ 不支持CF_DIBV5格式但是当多个应用程序将透明图像放入它们使用的剪贴板时CF_DIBV5(格式 17)保持 Alpha 通道的格式。

.NET Framework 无法处理CF_DIBV5格式,以便 .NET 应用程序无法将 Alpha 图像放入剪贴板或从剪贴板检索 Alpha 图像。

有没有c#代码支持CF_DIBV5从剪贴板到位图转换?


对不起!我正在回答我自己的问题:

[StructLayout(LayoutKind.Sequential)]
public struct BITMAPV5HEADER
{
  public uint bV5Size;
  public int bV5Width;
  public int bV5Height;
  public UInt16 bV5Planes;
  public UInt16 bV5BitCount;
  public uint bV5Compression;
  public uint bV5SizeImage;
  public int bV5XPelsPerMeter;
  public int bV5YPelsPerMeter;
  public UInt16 bV5ClrUsed;
  public UInt16 bV5ClrImportant;
  public UInt16 bV5RedMask;
  public UInt16 bV5GreenMask;
  public UInt16 bV5BlueMask;
  public UInt16 bV5AlphaMask;
  public UInt16 bV5CSType;
  public IntPtr bV5Endpoints;
  public UInt16 bV5GammaRed;
  public UInt16 bV5GammaGreen;
  public UInt16 bV5GammaBlue;
  public UInt16 bV5Intent;
  public UInt16 bV5ProfileData;
  public UInt16 bV5ProfileSize;
  public UInt16 bV5Reserved;
}        
public static Bitmap CF_DIBV5ToBitmap(byte[] data)
{
    GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
    var bmi = (BITMAPV5HEADER)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(BITMAPV5HEADER));
    Bitmap bitmap = new Bitmap((int)bmi.bV5Width, (int)bmi.bV5Height, -
                               (int)(bmi.bV5SizeImage / bmi.bV5Height), PixelFormat.Format32bppArgb,
                               new IntPtr(handle.AddrOfPinnedObject().ToInt32()
                               + bmi.bV5Size + (bmi.bV5Height - 1) 
                               * (int)(bmi.bV5SizeImage / bmi.bV5Height)));
    handle.Free();
    return bitmap;
}   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 CF_DIBV5 从剪贴板 (Format17) 转换为透明位图? 的相关文章

  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 将键码转换为相关的显示字符

    在 C Windows Forms 项目中 我有一个不提供 KeyPressed 事件的控件 它是一个 COM 控件 ESRI 映射 它仅提供 KeyUp 和 KeyDown 事件 包含关键事件参数 http msdn microsoft
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K

随机推荐

  • bluebirdjs 承诺包裹在 for 循环中

    我有很多函数用于向我的服务提供数据 我想循环遍历它们中的每一个 并在其中一个返回所需结果时立即停止 如果第一个有效 那很好 如果有异常或数据无效 我想转到下一个 依此类推 我怎样才能实现这个目标 我有以下代码 handleData func
  • Facebook“赞”按钮回调

    我对实现 facebook 喜欢 按钮感兴趣 但我想知道哪些用户正在单击此按钮 以便我可以从中获取一些有用的信息 据我所知 Facebook 让我们对谁在点击什么一无所知 有人知道如何跟踪哪个用户点击了特定产品的 喜欢 按钮吗 更新 赞 按
  • 如何将对象存储在 firebase cloud function RAM 中?

    我的应用程序需要在处理用户的请求之前构建几个大型哈希图 理想情况下 我想将这些哈希图存储在机器的内存中 这意味着它永远不需要进行任何昂贵的处理 并且可以快速处理任何传入的请求 但这对于 Firebase 不起作用 因为用户有可能触发一个新实
  • 将运行 EXE 的当前 Windows 用户替换为另一个用户

    假设我构建了一个从网络文件夹读取文件的 Windows 应用程序 网络折叠限制只有一个用户 fooUser 的访问 该应用程序安装在网络上的多台计算机上 我需要将当前用户替换为 fooUser 以便能够通过代码访问网络文件夹上的文件 这是一
  • 如何以字幕方式输出字符串?

    我希望能够输入一个字符串 带空格 并将其显示为移动符号 例如 Input Hello World 5 This signifies the number of characters the sign can hold Output Sign
  • arr.sort(key=lambda x: (x[0],-x[1])) 是什么意思?

    gt gt gt arr 4 5 4 6 6 7 2 3 1 1 gt gt gt arr sort key lambda x x 0 statement 1 gt gt gt arr 1 1 2 3 4 5 4 6 6 7 gt gt g
  • CSS 在背景图像上模糊,但在内容上不模糊 [重复]

    这个问题在这里已经有答案了 I did 这个例子 我试图模糊背景图像 但主要内容也模糊了 span 如何在不模糊内容的情况下模糊背景 jsfiddle blur bgimage overflow hidden margin 0 text a
  • 如何用mongoosastic+AJAX进行即时搜索?

    我已经成功配置了 mongoosastic 我尝试搜索并且工作正常 但是当涉及到前端时我不太确定如何实现这一点 我尝试了很多方法但无法想出一个好的解决方案 这是代码 For the Search API router post api se
  • 从 VBA 执行 SQL Server 存储过程并检索所有消息和结果集

    我希望能够从 MS Access VBA 执行 SQL Server 存储过程 这样我就可以读取 1 所有结果结果集 而不仅仅是第一个结果集 2 由 PRINT 语句或类似语句产生的任何消息 我有一个带有一个输入参数的测试存储过程 它会生成
  • 如何让 MySQL 在查询中提示输入值? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在 MySQL 控制台中对一些 SQL 查询进行了大量的试验和错误 例如 select
  • 查询生成器在字段类型数组上添加条件

    我的问题很简单 是否可以使用原则和查询生成器在字段类型数组上添加 where 语句 在我的实体内 我有以下内容 var array ORM Column name weekDays type array private weekDays 在
  • PHP 世博会推送通知

    我正在尝试使用 PHP 向我的 React Native 应用程序发送推送通知 下面的代码也发送了所有注册其令牌的用户 并且它一次发送了大量通知 尽管该令牌适用于特定设备 但它不断将通知推送给所有用户 key ExponentPushTok
  • 在 mongoose/mongodb/node 中使用异步回调循环

    我是 nodejs mongo mongoose 的新手 我正在尝试做一件非常简单的事情 我有以下架构 var authorSchema mongoose Schema name String Author mongoose model A
  • DrawingArea无法获取XID

    我有以下 Python 2 7 PyGObject 3 0 PyGST 0 10 模块 from gi repository import Gtk Gdk GdkPixbuf import pango import pygst pygst
  • 使用 WPF C# 打印

    我的应用程序将屏幕上显示的信息 使用 Canvas 控件 打印 到打印机 N 次 过程是 用户单击一个按钮 称为 打印 用文本更新画布 通常来自数据库 但对于下面的代码 它是硬编码的 打印到打印机使用新文本更新画布 同样来自数据库 但对于下
  • 在 React 中,本机“adb”不被识别为内部和外部命令

    我尝试在环境变量中设置路径 但它不起作用 错误如下 adb 不被识别为内部或外部命令 可运行的程序或批处理文件 启动应用程序 C Users Administrator AppData Local Android Sdk platform
  • j2me - 如何创建主从 UI

    我陷入了 j2me 项目的中间 因为我不知道如何做一些在其他平台上很容易完成的事情 但这似乎在 java me j2me 中没有直接的解决方案 我需要做的是这个 无论是使用Netbeans MIDP组件 LWUIT还是纯lcdui都没关系
  • C# MySql 创建用户

    我试图用 C 来做一个注册声明 显然我没能做到 我不知道问题是什么 话虽如此 这里是一个片段 MySqlConnection Connection new MySqlConnection SERVER localhost UID root
  • JComponent 一旦离开屏幕就停止渲染

    我正在尝试制作一个简单的动画 其中一个矩形从屏幕开始 在屏幕右边缘的右侧 并向左移动 因此 在本例中 我的框架的宽度为 1000 墙壁的 x 值为 1100 显然 首先 矩形不应该是 我们可见 但当矩形向左移动时 它最终应该变得可见 然而
  • 如何将 CF_DIBV5 从剪贴板 (Format17) 转换为透明位图?

    GDI 不支持CF DIBV5格式但是当多个应用程序将透明图像放入它们使用的剪贴板时CF DIBV5 格式 17 保持 Alpha 通道的格式 NET Framework 无法处理CF DIBV5格式 以便 NET 应用程序无法将 Alph