2011-08-17 58 views
2

我想在C++中用GDI實現一個漸變筆刷。我不想使用GDI +或任何其他圖形框架。我想漸變是任何方向(任意角度)。從C++和GDI的scatch中實現多梯度筆刷實現的問題

我在僞碼算法:

 For each pixel in x dirrection 
     For each pixel in the y direction 
      current position = current pixel - centre      //translate origin 
      rotate this pixel according to the given angle 
      scalingFactor =(rotated pixel + centre)/extentDistance //translate origin back 
      rgbColor = startColor + scalingFactor(endColor - startColor) 

extentDistance是從矩形的中心通過所述線的長度,並具有梯度等於所述梯度

確定到目前爲止好的角度。我可以畫這個,看起來不錯。但不幸的是,由於旋轉位矩形拐角有錯誤的顏色。結果只適用於90度倍數的角度。問題似乎是縮放因子不能在整個矩形的大小範圍內縮放。

我不知道你是否明白我的觀點cz如果沒有可視化的解釋,我很難解釋我的問題。

如果任何人都可以幫助或將我重定向到一些有用的材料,我將不勝感激。

+0

發佈您的實際代碼可能會更有幫助。僞代碼看起來沒問題,所以有可能問題在於實現的細節。 – 2011-08-17 16:17:22

回答

1

好吧夥計們修好了。顯然問題是,當我旋轉漸變填充(而不是矩形)時,我沒有正確計算比例因子。梯度縮放的距離根據梯度方向而變化。必須做的是找到矩形的邊緣點在旋轉之後最後到達的位置,並基於該位置可以找到漸變的縮放距離。所以基本上我的算法需要糾正的是extentDistance。

如何做到這一點:

•變換四個角的座標

•查找最小的所有4個X作爲其minX

•查找最大所有4個X的,並調用它maxX

•對y's做同樣的事情。

•這兩點之間的距離(最大和最小)是距離