는 한 가지 방법은, 바탕 화면 배경 무늬 이미지를 잡아 그것이 무슨 색깔 약간의 영지에 확인하고 그 기반으로 응용 프로그램의 색상을 변경할 수 있습니다.
(즉에 구글과 안타 많이) 현재 바탕 화면의 보류보기에 대한 기사 on geekpedia있다,하지만 기본 전제는 현재의 벽지의 레지스트리 값을 잡아하는 것입니다
RegistryKey rkWallPaper = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", false);
string WallpaperPath = rkWallPaper.GetValue("WallPaper").ToString();
당신 그런 다음 해당 경로를 사용하여 이미지를 열 수 있습니다. 그런 다음 RGB의 치수 및 개별 픽셀 색상과 같은 많은 특성을 확보 할 수 있습니다.
"더 흰색"또는 "더 검정"인지 여부를 결정하려면 많은 옵션이 필요합니다.
하나의 아이디어는 RGB로 각 픽셀 색을 얻고, 그레이 스케일 값을 얻기 위해 값을 평균 한 다음 이미지 전체의 각 픽셀의 그레이 스케일 값을 평균하는 것입니다. 128> 128이 나온다면 은이 "흰색"으로 장식 될 수 있습니다. < 128이면 "검은 색"입니다. 기본적으로 중간 회색으로 나누는 선의 어느면에서 이미지 픽셀 강도가 평균화되는지를 결정합니다.
// 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".
문제 : 느린 절차 일 수 있으므로 시간을 절약하기 위해 일부 픽셀 (예 : 10 번째 등) 만 샘플링 할 수 있습니다. 더 일반적으로 말하자면, 전혀 해킹되지 않는 것처럼 보입니다. 런타임에 사용자 파일을 당겨서 혼란스럽게하는 것은 거의 깨끗하지 않으며 잠재적 인 보안 및 안정성 문제를 제공합니다. 이미지가 더럽거나 손상되면 어떻게 될까요?
개인적으로 저는 사용자에게 단순히 색상/테마/스킨 자체의 선택권을 부여하거나 더 나은 방법으로 사용자 지정하도록 제안하는 것이 좋습니다.
출처
2010-02-11 00:51:53
xan
이 질문은 당신을 도울 답변을 포함하고 있습니다 : http://stackoverflow.com/questions/946544/good-text-foreground-color-for-a-given-background-color/946570 –
관련 (그러나 스스로 속아) http://stackoverflow.com/questions/3116260/given-a-background-color-how-to-get-a-foreground-color-that-make-it-readable-on http://stackoverflow.com/ 질문/3942878/how-to-determined-font-color-in-white-or-black-by-background-color – JYelton