2009-07-14 63 views
4

我有一些顏色似乎來自Delphi TColor變量(例如8388608,128,12632256)。我需要用PHP腳本將這些顏色轉換爲rgb值。這怎麼能在PHP中完成?使用PHP轉換delphi TColor

回答

8

德爾福TColor類型是一個整數,其位包含實際的RGB值是這樣的:

ssBBGGRR 

提取RGB值:

您可以通過執行逐位過濾掉部分AND0xFF,同時將這些位向右移動。

Delphi代碼:

R := Color and $FF; 
G := (Color shr 8) and $FF; 
B := (Color shr 16) and $FF; 

PHP代碼:

R = Color & 0xFF; 
G = (Color >> 8) & 0xFF; 
B = (Color >> 16) & 0xFF; 

警告有關係統顏色:

有其從系統中導出的顏色特殊顏色。 (如按鈕和窗口顏色)

這些顏色實際上並沒有設置有效的RGB值。您可以通過檢查前八位來檢測它們。如果它們不是零,則會有特殊的系統顏色。您也可以將顏色轉換爲整數。如果它是負面的,這是一種系統顏色。

在這種情況下,R部分包含系統顏色索引。

+0

我認爲TColor是奇怪的BGR; - (來自幫助文件)如果您指定TColor作爲特定的4字節十六進制數而不是使用圖形單元中定義的常量,則低三字節表示RGB顏色藍色,綠色和紅色的強度分別爲。值爲$ 00FF0000(Delphi)或0x00FF0000(C++)表示全強度,純藍色,$ 0000FF00(Delphi)或0x0000FF00(C++)爲純綠色,$ 000000FF(Delphi)或0x000000FF(C++)爲純紅色。 $ 00000000(Delphi)或0x00000000(C++)是黑色,$ 00FFFFFF(Delphi)或0x00FFFFFF(C++)是白色。 – robsoft 2009-07-14 13:31:15