设备上下文 (HDC) 中的 Alpha 通道
Alpha channel in DeviceContext (HDC)
请帮助我在HDC中使用alpha通道。我让HDC dc throw CreateCompatibleDC。比调用CreateDIBSection,可以在内存中找到图像的字节数。比调用 DrawFrameControl 到此 dc。一切正常,但在内存中每个像素有 4 个字节,alpha 通道填充 00。即使以前有FF。但我需要阿尔法通道。如何使 DrawFrameControl 设置真正的 alpha 值或不触摸它们。谢谢。很抱歉英语不好:(
不能
使 GDI 不写入每像素四字节位图的 alpha/保留字节。 GDI并不是真正的alpha感知,除了几个功能,如AlphaBlend
。但是,您可以使用它写入并将 alpha 重置为 0 的知识来了解它写入的像素,然后手动修复 alpha。
有关详细信息,请阅读以下三篇文章:
- 使用 GDI 的透明图形,第 1 部分
- 使用 GDI 的透明图形,第 1 部分 1/2
- 使用 GDI 的透明图形,第 2 部分
前两个可能会为您提供足够的信息来实现您想要的。
这些文章采用一种通用方法来使用 GDI 函数处理 alpha,通过扫描 alpha 被破坏的像素并修复它(并介绍更高级的技术,使用正确的 alpha 将多个东西绘制在彼此之上。 FrameRect
绘制一个矩形,其中线条宽且高一个单位。 您可能会发现使用线条绘制,甚至直接编辑内存中的像素位图,以在内存中绘制直线更有效。 这避免了必须扫描整个位图以查找GDI绘制的像素 - 毕竟,因为它是一个具有一个单位宽的边缘的矩形,您确切地知道哪些像素将被绘制到,并且可以自己编辑它们。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 关于 Direct3D9 中的 alpha 混合的问题
- SDL中的绘制具有不同的alpha值
- 是否可以将 DirectX 中的所有 Alpha 设置为某个值,例如 0.75
- SDL中的Alpha混合在调整窗口大小后重置
- 设备上下文 (HDC) 中的 Alpha 通道
- 如何在boost::gil中使用alpha运河调整png图像的大小
- 从Qt中的每个像素读取Alpha通道
- 在8位位图中处理alpha通道的好方法?-OpenGL-C++
- 在OpenCV中应用alpha通道到图像的最快方式