我有一個位圖,我通過平鋪多次同一圖形創建。當位圖被創建時,它會根據特定的標準爲圖塊着色。c#winforms GDI +
加載位圖時,我希望給用戶更改基於進一步預定義標準的圖塊顏色的選項。因此,我是否需要放棄當前的位圖,使用新顏色再次生成並附加到面板上。或者我可以遍歷每個圖塊的位圖並更改顏色的方式?
謝謝。
我有一個位圖,我通過平鋪多次同一圖形創建。當位圖被創建時,它會根據特定的標準爲圖塊着色。c#winforms GDI +
加載位圖時,我希望給用戶更改基於進一步預定義標準的圖塊顏色的選項。因此,我是否需要放棄當前的位圖,使用新顏色再次生成並附加到面板上。或者我可以遍歷每個圖塊的位圖並更改顏色的方式?
謝謝。
這取決於用戶多長時間更換瓷磚顏色。如果他們不會經常這樣做,那麼生成一個新的位圖可能會更容易(主要是因爲您的代碼看起來像是針對此場景進行了優化)。
然而,更好的性能可能是使用Bitmap.LockBits/UnlockBits方法獲取位圖中的像素數據,然後直接操縱像素數據。有關如何執行此操作的示例,請參閱Bitmap.LockBits方法(http://msdn.microsoft.com/zh-cn/library/5ey6h79d.aspx)上的MSDN文檔。
據我所知,唯一可以通過位圖並改變顏色的方法是逐像素地進行,所以我認爲最好的方法是在用戶選擇新顏色時從頭開始生成位圖。
這是正確的。位圖是像素的空間映射陣列。它沒有任何添加到圖像中的「貼圖」的概念。在單個圖塊中重新着色像素,然後重新創建多平鋪圖形。確保在不再需要時處理先前的位圖。 – 2011-01-11 10:42:18
http://www.bobpowell.net/lockingbits.htm也值得一看,如果你想使用'不安全'的代碼(它會快一點)。 – Josh 2011-01-11 10:47:14