我正在使用C#编写一个程序,它可以截取用户屏幕的一部分。大多数情况下它能够正常工作,但是我最近遇到了一个问题。在输出图像中,#0D0B0C(RGB 13,11,12)颜色中至少有一个像素总是出现为透明。如果将PixelFormat设置为Format32bppArgb,则该颜色的任何实例都会在保存的png文件中显示为透明。如果我将其设置为Format32bppRgb或Format24bppRgb,则同一像素颜色显示为黑色。
我不知道可能导致这种情况,但我唯一能够做的“修复”它的方法就是在执行CopyFromScreen()之前将graphics对象清除为该颜色。然而,由于几个原因,我不愿意这样做。首先,我不知道是否只有这种颜色存在问题(有着16,777,216种颜色,可能有很多可能性),其次,我讨厌一些拼凑出来的解决办法,这似乎就是一个拼凑出来的解决办法。
有人能否阐明可能导致这个问题的原因?我已经尝试过在位图创建时和在CopyFromScreen方法中调用CopyPixelOperation函数时改变PixelFormat,但没有效果。将graphics对象清除为该颜色“修复”这个问题,似乎表明透明性来自屏幕数据本身,但这不合理。我已经盯着这个问题很长时间了,我认为我需要一个全新的视角。如果有人知道发生这种情况的原因,请告诉我。谢谢。
我不知道可能导致这种情况,但我唯一能够做的“修复”它的方法就是在执行CopyFromScreen()之前将graphics对象清除为该颜色。然而,由于几个原因,我不愿意这样做。首先,我不知道是否只有这种颜色存在问题(有着16,777,216种颜色,可能有很多可能性),其次,我讨厌一些拼凑出来的解决办法,这似乎就是一个拼凑出来的解决办法。
有人能否阐明可能导致这个问题的原因?我已经尝试过在位图创建时和在CopyFromScreen方法中调用CopyPixelOperation函数时改变PixelFormat,但没有效果。将graphics对象清除为该颜色“修复”这个问题,似乎表明透明性来自屏幕数据本身,但这不合理。我已经盯着这个问题很长时间了,我认为我需要一个全新的视角。如果有人知道发生这种情况的原因,请告诉我。谢谢。
new Bitmap(width, height, PixelFormat.Format32bppArgb)
改为new Bitmap(width, height, PixelFormat.Format32bppRgb)
解决了我的问题。 - ghord