C#Bitmap对象,颜色显示为透明

HaL*_*eEk 6 c# graphics image bitmap pixelformat

我正在使用C#中的程序来截取用户屏幕的一部分.尽管它应该是最有效的,但我最近遇到了一个问题.似乎(至少)一个像素颜色在输出图像中始终显示为透明.颜色#0D0B0C(RGB 13,11,12)的任何实例在保存的png中显示为透明.这是将PixelFormat设置为Format32bppArgb.如果我将其设置为Format32bppRgb或Format24bppRgb,则相同的像素颜色在保存的png中显示为黑色.

我不知道是什么导致这种情况,但我唯一能做的就是"修复"它是在执行CopyFromScreen()之前将图形对象清除为该颜色.出于某些原因,我不愿意这样做.首先,我不知道这是唯一有问题的颜色(使用16,777,216种颜色有很多可能性),其次,我讨厌修复黑客,这似乎是一个黑客修复.

任何人都可以解释可能导致这个问题的原因吗?我在位图创建上搞乱了PixelFormat,在CopyFromScreen方法中使用了CopyPixelOperation,似乎没什么用.将图形对象清除为该颜色"修复"的事实似乎告诉我透明度来自屏幕数据本身,但这没有意义.我一直盯着这个问题太久了,我想我需要对它有一个全新的看法.如果有人知道为什么会发生这种情况,我很乐意听到.谢谢.

can*_*sik 0

alpha 值可能是 0 吗?你检查过吗?

因为 Format32bppArgb 和 Format32bppRgb 之间的最大区别是第二种格式不知道 Alpha 通道。