Vista / 7: Как получить цвет стекла ?

Как вы используете DwmGetColorizationColor ?

Документация говорит, что возвращает два значения:

  • a 32- бит 0xAARRGGBB , содержащий цвет, использованный для композиции стекла
  • , логический параметр, который имеет значение true, если цвет представляет собой непрозрачную смесь (, что бы это ни значило )

Вот цвет что мне нравится, тошнотворный зеленый alt text

Вы можете заметить, что цвет зеленый, и полупрозрачная строка заголовка (на белом фоне) очень четко показывает цвет сопли: enter image description here

Я пытаюсь получить цвет из Windows:

DwmGetColorizationColor(dwCcolorization, bIsOpaqueBlend);

И я получаю

dwColorization: 0x0D0A0F04
bIsOpaqueBlend: false

Согласно документации это значение имеет формат AARRGGBB и поэтому содержит:

AA: 0x0D (13)
RR: 0x0A (10)
GG: 0x0F (15)
BB: 0x04 (4)

Это предположительно означает, что цвет - (10, 15, 4), с непрозрачностью ~ 5,1%.

Но если вы посмотрите на это значение RGB, оно совсем близко от моего желаемого сопли зеленого цвета. Вот

  • (10, 15, 4) с нулевой непрозрачностью (исходный цвет) и
  • (10,15,4) с 5% непрозрачностью на фоне белого / шахматной доски:

alt text

Вместо того, чтобы быть Лайм зеленый, DwmGetColorizationColor возвращает почти полностью прозрачный черный .

Итак, вопрос таков: Как получить цвет стекла в Windows Vista / 7?

Я пытался использовать DwmGetColorizationColor , но это не очень хорошо работает. alt text

Итак, это сводится к - DwmGetColorizationColor полностью непригоден для приложений, пытающихся применить текущий цвет на Непрозрачная поверхность.


Я люблю Скриншоты этого парня намного лучше, чем у меня. Используя его скриншоты в качестве шаблона, я сделал еще несколько ярких картинок:

alt text

alt text

alt text

alt text

alt text

alt text

Для двух последних скриншотов альфа-микросхема представляет собой настоящий частично прозрачный PNG, который сливается с фоном вашего браузера. Круто! (Я такой фанат)

Редактировать 2: Пришлось расставлять их в цвете радуги. (Я такой фанат)

Редактировать 3: Ну, теперь мне, конечно, нужно добавить Желтый.


Недокументированные / неподдерживаемые / хрупкие обходные пути

Существует недокументированный экспорт из DwmApi.dll в точке входа 137, которую мы назовем DwmGetColorizationParameters :

HRESULT GetColorizationParameters_Undocumented(out DWMCOLORIZATIONPARAMS params);

struct DWMCOLORIZATIONPARAMS
{
   public UInt32 ColorizationColor;
   public UInt32 ColorizationAfterglow;
   public UInt32 ColorizationColorBalance;
   public UInt32 ColorizationAfterglowBalance;
   public UInt32 ColorizationBlurBalance;
   public UInt32 ColorizationGlassReflectionIntensity;
   public UInt32 ColorizationOpaqueBlend;
}

Нас интересует первый параметр: ColorizationColor .

Мы также можем прочитать значение из реестра:

HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
    ColorizationColor: REG_DWORD = 0x6614A600

Таким образом, вы выбрали яд для создания проблем с appcompat. Вы можете

См. Также


Я давно хотел спросить этот вопрос уже больше года. я всегда знал, что невозможно ответить, и что единственный способ заставить кого-то обратить внимание - это сделать красочные скриншоты; разработчиков привлекают блестящие вещи. Но с другой стороны это означает, что мне пришлось приложить все усилия для изготовления приманок.

53
задан Community 23 May 2017 в 02:10
поделиться

2 ответа

Цвет окраски! = Выбранный основной цвет. Я знаю, это вводит в заблуждение.

Но я сбит с толку. Вы позаимствовали изображение из моего сообщения под названием « Получение основного цвета Aero Glass для рендеринга непрозрачной поверхности ». Разве это не то, что ты хочешь делать? Я также указал в сообщении место в реестре, в котором хранится вся информация о цвете (HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ DWM) для целей поиска.

Отредактировано 26.08.

DwmGetColorizationColor (dwmapi.dll) возвращает «цвет раскраски», который представляет собой смесь различных цветов (включая выбранный вами основной цвет) и логики шейдера для достижения общего эффекта стекла.

Всю необходимую информацию о цветах можно найти в разделе реестра, указанном выше. Базовый цвет, цвета, используемые при смешивании, и результирующий цвет раскраски присутствуют.

(Вышеупомянутый ключ присутствует в Windows Vista и более поздних версиях.)

10
ответ дан 7 November 2019 в 08:54
поделиться

Как вам A0F040?


OP Edit: Вот как выглядит 0xA0F040 для меня:

alt text

1
ответ дан 7 November 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: