0
我在我的代碼片段文件夾中發現了這種舊的色彩褪色功能,並希望將其實施到我的其中一個項目中。它可以用來淡化一種顏色到另一種顏色。這是一個很長的一行代碼:色彩褪色功能錯誤
D3DCOLOR GetFadedColor(D3DCOLOR from, D3DCOLOR to, float factor)
{
return (factor<0.0f)?from:((factor>1.0f)?to:((((from>>24)>(to>>24))?((from>>24)-(D3DCOLOR)(factor*(float)((from>>24)-(to>>24)))):((from>>24)+(D3DCOLOR)(factor*(float)((to>>24)-(from>>24))))<<24)|((((from<<8)>>24)>((to<<8)>>24))?(((from<<8)>>24)-(D3DCOLOR)(factor*(float)(((from<<8)>>24)-((to<<8)>>24)))):(((from<<8)>>24)+(D3DCOLOR)(factor*(float)(((to<<8)>>24)-((from<<8)>>24))))<<16)|((((from<<16)>>24)>((to<<16)>>24))?(((from<<16)>>24)-(D3DCOLOR)(factor*(float)(((from<<16)>>24)-((to<<16)>>24)))):(((from<<16)>>24)+(D3DCOLOR)(factor*(float)(((to<<16)>>24)-((from<<16)>>24))))<<8)|((((from<<24)>>24)>((to<<24)>>24))?(((from<<24)>>24)-(D3DCOLOR)(factor*(float)(((from<<24)>>24)-((to<<24)>>24)))):(((from<<24)>>24)+(D3DCOLOR)(factor*(float)(((to<<24)>>24)-((from<<24)>>24)))))));
}
D3DCOLOR
只是一個DWORD
(unsigned long
)。顏色可以是例如0xAARRGGBB(A-alpha,R-red,G-green,B-blue),但也可以與其他組合物一起使用。
顯然這是一團糟,但這正是我所需要的。
的問題是,因爲預期它不工作:
GetFadedColor(0x00000000, 0xff33cccc, 0.3f)
// = 0x4c0f3d3d - working as intended
GetFadedColor(0xff33cccc, 0x00000000, 0.3f)
// = 0x000000bf - pretty wrong
GetFadedColor(0xff00ff00, 0x00ff00ff, 0.3f)
// = 0x004c00ff - second color value is correct, everything else wrong
其實我不知道它是如何工作的,不記得在那裏我有它,所以我問這裏幫幫我。要麼幫我找到錯誤,要麼找到一個替代功能來做到這一點。
謝謝。我希望有人發現錯誤或有一個更清潔的解決方案。代碼似乎相當多餘,對於這項任務似乎有點多餘。 – typ1232
@ typ1232對我的解決方案有幫助嗎? –
非常感謝!這正是應該發生的事情。它是人類可讀的! – typ1232