Объект C# Bitmap, цвет выглядит прозрачным

Я работаю над программой на C#, которая делает скриншоты экрана пользователя. Для большинства дерзких он работает как надо, но недавно я столкнулся с одной проблемой. Кажется, что есть (по крайней мере) один цвет пикселя, который всегда выглядит прозрачным в выходном изображении. Любой экземпляр цвета #0D0B0C (RGB 13, 11, 12) отображается прозрачным в сохраненном png. Это с PixelFormat, установленным на Format32bppArgb. Если я установлю его на Format32bppRgb или Format24bppRgb, тот же цвет пикселя будет отображаться как черный в сохраненном png.

Я понятия не имею, что может быть причиной этого, но единственное, что я смог сделать, чтобы "исправить" это очистить графический объект до этого цвета перед выполнением CopyFromScreen(). Я ненавижу это делать, хотя по нескольким причинам.Во-первых, я не знаю, единственный ли это цвет, у которого есть проблема (что с 16 777 216 цветами есть довольно много возможностей), и, во-вторых, я ненавижу хакерские исправления, это похоже на хакерское исправление.

Может ли кто-нибудь пролить свет на то, что может быть причиной этой проблемы? Я возился с PixelFormat при создании растрового изображения и с CopyPixelOperation в методе CopyFromScreen, похоже, ничего не работает. Тот факт, что очистка графического объекта до этого цвета «исправляет», кажется, говорит мне, что прозрачность исходит из самих данных экрана, но это не имеет смысла. Я слишком долго смотрел на это, я думаю, мне нужен свежий взгляд на это. Если у кого-то есть какие-либо идеи, почему это может происходить, я хотел бы услышать это. Спасибо.

6
задан HaLo2FrEeEk 8 March 2012 в 07:14
поделиться