【发布时间】:2012-03-25 17:24:32
【问题描述】:
我正在使用 C# 编写一个程序,该程序会截取用户屏幕上的药水的屏幕截图。对于大多数人来说,它应该可以正常工作,但我最近遇到了一个问题。似乎(至少)一种像素颜色在输出图像中始终显示为透明。颜色 #0D0B0C (RGB 13, 11, 12) 的任何实例在保存的 png 中都显示为透明。这是将 PixelFormat 设置为 Format32bppArgb。如果我将其设置为 Format32bppRgb 或 Format24bppRgb,则相同的像素颜色在保存的 png 中显示为黑色。
我不知道是什么原因造成的,但我唯一能够“修复”的就是在执行 CopyFromScreen() 之前将图形对象清除为该颜色。我不愿意这样做,但有几个原因。首先,我不知道这是否是唯一有问题的颜色(16,777,216 种颜色有很多可能性),其次,我讨厌 hack 修复,这似乎是 hack 修复。
任何人都可以阐明可能导致此问题的原因吗?我在位图创建时弄乱了 PixelFormat,在 CopyFromScreen 方法中弄乱了 CopyPixelOperation,似乎没有任何效果。将图形对象清除为该颜色“修复”这一事实似乎告诉我透明度来自屏幕数据本身,但这没有意义。我已经盯着这个太久了,我想我需要一个新的视角来看待它。如果有人知道为什么会发生这种情况,我很想听听。谢谢。
【问题讨论】:
标签: c# image graphics bitmap pixelformat