我一直试图破解模糊花边屏幕保护程序,以便在选择特定颜色(颜色#A9D691)时将薄片的颜色更改为白色。我似乎无法确切地知道如何做到这一点(我对这些东西有点像菜鸟)。
我查看了code,看来这些片段的颜色设置在FuzzyFlakesInit()
函数的末尾附近,就在这里:
Flake.ForeColor = FuzzyFlakesColorResource(Flake.Colors.Fore);
Flake.BackColor = FuzzyFlakesColorResource(Flake.Colors.Back);
Flake.BordColor = FuzzyFlakesColorResource(Flake.Colors.Bord);
Flake.GCValues.foreground = Flake.ForeColor;
Flake.GCValues.background = Flake.BackColor;
我尝试做的是首先检查是否设置了特定颜色,如果是,请将Flake.Colors.Fore
变量设置为白色。我尝试过使用这样的代码:
if (flake->Colors.Fore == (char) "#A9D691") {
flake->ForeColor = FuzzyFlakesColorResource(flake, "white");
} else {
flake->ForeColor = FuzzyFlakesColorResource(flake, flake->Colors.Fore);
}
flake->BackColor = FuzzyFlakesColorResource(flake, flake->Colors.Back);
flake->BordColor = FuzzyFlakesColorResource(flake, flake->Colors.Bord);
遗憾的是,像这样的简单黑客并不起作用。所以我不知道我是否必须转换"#A9D691"因为FuzzyFlakesColorHelper()
函数似乎已经设置了这些变量。
答案 0 :(得分:2)
if (flake->Colors.Fore == (char) "#A9D691")
将颜色字符串与指向字符串文字"#A9D691"
的指针进行比较,转换为char
,它永远不会返回true。您想要比较字符串的值,因此请使用strcmp
if (strcmp(flake->Colors.Fore, "#A9D691") == 0)
答案 1 :(得分:1)
抱歉有错误的颜色算法。从来没有按预期工作,我应该在提交代码之前调试它。您必须将您的更改放在FuzzyFlakesColorHelper中。如果您更改了行:
sprintf(Flake.Colors.Fore, "#%02X%02X%02X", iR0, iG0, iB0);
类似
sprintf(Flake.Colors.Fore, "#%02X%02X%02X", 0xFF, 0xFF, 0xFF);
会使片状变白或仅仅改变FuzzyFlakesInit中的Flake.Colors.Fore。
/*
* Here we establish our colormap based on what is in
* Flake.Colors.Back
*/
if (FuzzyFlakesColorHelper())
{
fprintf(stderr, " reverting to random\n");
if (Flake.Colors.Back)
free(Flake.Colors.Back);
Flake.Colors.Back = malloc(sizeof(unsigned char) * 8);
sprintf(Flake.Colors.Back, "#%X%X%X%X%X%X", random() % 16,
random() % 16, random() % 16, random() % 16, random() % 16,
random() % 16);
FuzzyFlakesColorHelper();
}
Flake.BackColor = FuzzyFlakesColorResource(Flake.Colors.Back);
Flake.BordColor = FuzzyFlakesColorResource(Flake.Colors.Bord);
如果您希望能够以十六进制格式#ffffff指定颜色,则必须通过FuzzyFlakesColorResource传递它。从该表单转换为xscreensaver和X11使用的表单。
它的工作方式是你给它的颜色是背景颜色,然后这个颜色算法应该选择边框颜色(Flake.Colors.Bord)和片状颜色(Flake.Colors.Fore)如果你完全绕过FuzzyFlakeColorHelper并手动设置可以解决问题的颜色(这就是原始版本的工作方式,并且颜色被硬编码到原始版本中,但我认为能够指定一种颜色并获得两种类似的选择是很好的为了你。) 很高兴的人在事后多年仍然喜欢我的屏幕保护程序,祝你好运。