Если я правильно понимаю, один из подходов может заключаться в том, чтобы заполучить изображение рабочего стола, проверить в каком-нибудь поместье его цвет, а затем изменить цвет приложения на его основе.
На geekpedia есть статья *1004* о том, как получить текущие обои для рабочего стола (и множество обращений к Google), но основная предпосылка заключается в получении значения реестра текущих обоев:
RegistryKey rkWallPaper = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", false);
string WallpaperPath = rkWallPaper.GetValue("WallPaper").ToString();
Вы можете использовать этот путь, чтобы открыть изображение. После этого вы можете получить множество свойств, таких как размеры и цвета отдельных пикселей в RGB.
Чтобы определить, «белый» или «черный», у вас есть много вариантов.
Одной из идей было бы получить цвет каждого пикселя в RGB, усреднить значения (чтобы получить значение в оттенках серого), а затем усреднить значение в оттенках серого для каждого пикселя по изображению. Если получится> 128, тогда можно будет считать «белым». Если <128, то «черный». По сути, вы решаете, с какой стороны от средней серой разделительной линии интенсивность пикселей изображения усредняется. </p>
// Psudo code - can't check the C# spec atm.
foreach(Pixel p in image)
{
// get average of colour components.
double greyScale = (p.Red + p.Green + p.Blue) / 3;
totalIntensity += greyScale;
}
double averageImageIntensity = totalIntensity / image.NumPixels;
if(totalIntensity > 128) // image could be considered to be "white"
else // image could be considered "black".
Проблемы: может быть медленной процедурой, вам может потребоваться сэмплировать только некоторые пиксели (скажем, каждый десятый и т. Д.), Чтобы сэкономить время. В более общем смысле это выглядит довольно хакерской вещью. Извлечение пользовательских файлов во время выполнения и работа с ними вряд ли чиста, и это создает потенциальные проблемы безопасности и стабильности. Что если изображение тусклое или поврежденное и т. Д.
Лично я бы предложил просто предоставить пользователю выбор цвета / темы / кожи, или, что еще лучше, позволить ему настроить его!