2012-07-17 30 views
0

我一直試圖破解模糊屏幕保護程序,以便在選擇特定顏色(顏色#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()函數似乎已經設置了這些變量。

回答

2
if (flake->Colors.Fore == (char) "#A9D691") 

顏色比較字符串的指針字符串字面"#A9D691",轉換爲char,從未返回true。要比較的字符串的值,所以使用strcmp

if (strcmp(flake->Colors.Fore, "#A9D691") == 0) 
+0

謝謝Daniel。雖然它編譯並運行,但我也無法獲得片狀物爲白色。 – Ertain 2012-07-18 05:41:19

+0

任何消息?我不確定「白色」是否是可解析的顏色字符串,如果不是,它應該向stderr發送消息。 – 2012-07-18 05:55:14

+0

當我從目錄中運行屏幕保護程序時,它不會給我任何錯誤。我使用了這個命令:'./fuzzyflakes -color「#A9D691」' – Ertain 2012-07-18 18:54:54

1

對不起,越野車顏色算法。從來沒有像預期的那樣工作,我應該在提交代碼之前進行更多的調試。您必須將您的更改置於FuzzyFlakesColorHelper中。如果你改了行:

sprintf(Flake.Colors.Fore, "#%02X%02X%02X", iR0, iG0, iB0); 

喜歡的東西

sprintf(Flake.Colors.Fore, "#%02X%02X%02X", 0xFF, 0xFF, 0xFF); 

,將使薄片白色或簡單地改變Flake.Colors.Fore在FuzzyFlakesInit。

/* 
    * 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,並手動設置可以做到這一點的顏色(這就是原始版本的工作原理,並且顏色被硬編碼爲原始版本,但我認爲能夠指定一種顏色並得到兩個類似爲你挑選。) 很高興的人仍然喜歡我的屏保後的事實,好運。