关于Direct2D透明的问题?

时间:2022-06-27 23:40:34
最近在编写一个能使位图的指定颜色透明的函数,但是无法实现。
MSDN也看过了,Alpha模式看不懂阿
请问各位高人,有什么东西能够实现这个,能不能指点一二

(学生党,可能不能即时看到,请见谅)

15 个解决方案

#2


引用 1 楼 paschen 的回复:
TransparentBlt 就可以

https://msdn.microsoft.com/en-us/library/dd145141(VS.85).aspx


这是GDI的函数啊
有没有Direct2D的函数?谢谢了!

#3


百度搜相关关键字。

#4


不能直接修改位图吗?

#5


引用 3 楼 zhao4zhong1 的回复:
百度搜相关关键字。

搜过了,搜不到才来问的啊

#6


引用 4 楼 donjin9 的回复:
不能直接修改位图吗?

是的,搜过Lock
但是不行,没法对像素进行操作..做出来的东西很诡异
求函数!谢谢了!

#8


我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?

#9


GDI为什么不能用,Direct2D并非全面取代GDI、GDI+,而是协作关系,ms明确说了The Direct2D API is designed to interoperate well with GDI, GDI+, and Direct3D.

#10


引用 7 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=Direct2D%20透明
关于Direct2D透明的问题?


感谢..但是这些都看过了啊 T_T

#11


引用 8 楼 donjin9 的回复:
我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?


感觉有点迷啊~~Alpha通道的图怎么做啊   PS里我用了背景橡皮擦,但是保存成bmp自动变黑色了

#12


引用 9 楼 DelphiGuy 的回复:
GDI为什么不能用,Direct2D并非全面取代GDI、GDI+,而是协作关系,ms明确说了The Direct2D API is designed to interoperate well with GDI, GDI+, and Direct3D.


谢谢您,但是我已经有GDI透明的函数了
这次是想实现Direct2D的功能啊  T_T

#13


引用 11 楼 dudujerry 的回复:
Quote: 引用 8 楼 donjin9 的回复:

我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?


感觉有点迷啊~~Alpha通道的图怎么做啊   PS里我用了背景橡皮擦,但是保存成bmp自动变黑色了

bmp没透明通道,保存成png文件
24位bmp是R8G8B8 32位png是A8R8G8B8
A等于255完全不透明 0完全透明
简单把黑转透明就是把rgb等于0的a也设成0
锁像素,模板缓存,像素着色器都能做

#14


引用 13 楼 qq_31709097 的回复:
Quote: 引用 11 楼 dudujerry 的回复:

Quote: 引用 8 楼 donjin9 的回复:

我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?


感觉有点迷啊~~Alpha通道的图怎么做啊   PS里我用了背景橡皮擦,但是保存成bmp自动变黑色了

bmp没透明通道,保存成png文件
24位bmp是R8G8B8 32位png是A8R8G8B8
A等于255完全不透明 0完全透明
简单把黑转透明就是把rgb等于0的a也设成0
锁像素,模板缓存,像素着色器都能做


好的,我去试试,谢谢您

#15


BITMAP支持32位RGBA格式,实际上Direct2D的绘制目标只支持32位BITMAP(没有确认,我印象如此),源可以支持其他格式,包括PNG、JPEG之类的,似乎还支持JPEG-XR的10位每通道格式。

#1


#2


引用 1 楼 paschen 的回复:
TransparentBlt 就可以

https://msdn.microsoft.com/en-us/library/dd145141(VS.85).aspx


这是GDI的函数啊
有没有Direct2D的函数?谢谢了!

#3


百度搜相关关键字。

#4


不能直接修改位图吗?

#5


引用 3 楼 zhao4zhong1 的回复:
百度搜相关关键字。

搜过了,搜不到才来问的啊

#6


引用 4 楼 donjin9 的回复:
不能直接修改位图吗?

是的,搜过Lock
但是不行,没法对像素进行操作..做出来的东西很诡异
求函数!谢谢了!

#7


#8


我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?

#9


GDI为什么不能用,Direct2D并非全面取代GDI、GDI+,而是协作关系,ms明确说了The Direct2D API is designed to interoperate well with GDI, GDI+, and Direct3D.

#10


引用 7 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=Direct2D%20透明
关于Direct2D透明的问题?


感谢..但是这些都看过了啊 T_T

#11


引用 8 楼 donjin9 的回复:
我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?


感觉有点迷啊~~Alpha通道的图怎么做啊   PS里我用了背景橡皮擦,但是保存成bmp自动变黑色了

#12


引用 9 楼 DelphiGuy 的回复:
GDI为什么不能用,Direct2D并非全面取代GDI、GDI+,而是协作关系,ms明确说了The Direct2D API is designed to interoperate well with GDI, GDI+, and Direct3D.


谢谢您,但是我已经有GDI透明的函数了
这次是想实现Direct2D的功能啊  T_T

#13


引用 11 楼 dudujerry 的回复:
Quote: 引用 8 楼 donjin9 的回复:

我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?


感觉有点迷啊~~Alpha通道的图怎么做啊   PS里我用了背景橡皮擦,但是保存成bmp自动变黑色了

bmp没透明通道,保存成png文件
24位bmp是R8G8B8 32位png是A8R8G8B8
A等于255完全不透明 0完全透明
简单把黑转透明就是把rgb等于0的a也设成0
锁像素,模板缓存,像素着色器都能做

#14


引用 13 楼 qq_31709097 的回复:
Quote: 引用 11 楼 dudujerry 的回复:

Quote: 引用 8 楼 donjin9 的回复:

我的意思是说不能事先准备好带alpha通道的图吗?
还是一定要在运行中判断透明颜色呢? 关于Direct2D透明的问题?


感觉有点迷啊~~Alpha通道的图怎么做啊   PS里我用了背景橡皮擦,但是保存成bmp自动变黑色了

bmp没透明通道,保存成png文件
24位bmp是R8G8B8 32位png是A8R8G8B8
A等于255完全不透明 0完全透明
简单把黑转透明就是把rgb等于0的a也设成0
锁像素,模板缓存,像素着色器都能做


好的,我去试试,谢谢您

#15


BITMAP支持32位RGBA格式,实际上Direct2D的绘制目标只支持32位BITMAP(没有确认,我印象如此),源可以支持其他格式,包括PNG、JPEG之类的,似乎还支持JPEG-XR的10位每通道格式。