問題:在之前的文章中,我實現了HeatMap熱力圖的效果,但是實際使用過程中,尤其是多次疊加后,效果較為極端化(如下圖),出現了大量數據接近峰值的狀況,在渲染后,看不出過渡層級變化,於是我針對這個問題,做了相關優化。
原效果:
原疊加算法:
value=dst*src/255
這個算法會使得值逐漸接近於0,在灰度映射前,這個rgb值就是黑色,而且取值范圍本身就只有0-255的范圍,經過分析,我們決定打破這個界限。
優化算法:
1、用int數組來存儲value,這樣可以突破上限。
2、針對整個數組進行歸一化。
3、由歸一化的結果重新映射灰度值。
4、由灰度值映射彩色值。
優化后的效果:
具體過程不再贅述了,說說遇到的坑:
在非托管資源轉為托管資源的時候,我當時直接用int[],出現了大量的-1值,而且會出現句柄超出索引的情況,拋異常“嘗試讀取或寫入受保護的內存”,我思考了很久才發現,這是4個byte轉為一個int類型的結果,數據在物理合並之后會進行取反加一,數據必然出錯。