2012-03-21 43 views
0

在D2D中,是否有創建使用自定義路徑幾何作爲其開始/停止點的漸變刷的方法?我可以爲路徑的每一步創建一個不同的筆刷,並將其作爲一個單獨的筆刷路徑進行渲染,但我正在尋找一些不會導致性能下降的方法。沿幾何路徑的Direct2D漸變

謝謝!

回答

1

你想要的是相當於GDI +的PathGradient,它在Direct2D中根本不存在。

作爲一種解決方法,您可以嘗試使用GDI +將您需要的內容呈現到位圖中,然後使用Direct2D進行繪製。這不會被硬件加速,GDI +和Direct2D之間的位圖共享有點笨拙,但至少可以工作。您可以使用ID2D1RenderTarget::CreateBitmap()創建一個ID2D1Bitmap,然後鎖定GDI +位圖,然後使用ID2D1Bitmap::CopyFromMemory()和來自GDI + BitmapData的值。

如果您使用的是軟件渲染目標,您還可以使用ID2D1RenderTarget::CreateSharedBitmap()這可以讓您跳過memoroy複製。它需要你首先用自己的IWICBitmapLock實現包裝GDI + BitmapData(又名「鎖定的GDI +位圖」)(這並不困難,但肯定笨拙)。

+0

不幸的是,這可能是這樣做的唯一方法... – user1181950 2012-04-25 20:08:06

+0

如果它有任何安慰,PathGradient也從WPF和XPS中丟失。隨着Direct2D,這三個共享完全相同的「繪圖語言」;去比較他們的API,你會看到! – 2012-04-27 03:22:17