Canvas繪制線條模糊的解決方案


  前段時間,做一個跨平台app項目,需要繪制分時圖和K線圖。找了很多開源的js的圖表庫,包括echarts、highcharts等等,都不是很滿意,原因有2:

  1、太臃腫,我實際上只要一個分時和一個K線圖表,最多搭配幾個線形圖

  2、不滿足需求。主要就是分時圖,國內玩的js圖表庫,幾乎都沒有分時圖。都是用1分鍾線的收盤價線來做的,和中國股民的使用習慣完全不搭界。

  多年前有人開源了一個js繪制股票圖形的庫,叫做html54stock,圖像表現上很符合中國人的使用習慣,但是也有問題:

  1、封裝不好,很多代碼還在html里寫的,沒有做好封裝

  2、繪制的圖像經常有模糊出現,即線條有毛邊

  看了一下html54stock的源碼,又梳理了一遍自己的需求,終於決定自己寫一個簡易的庫。

  繪制本身不難,主要要處理的就是封裝和線條模糊的問題。封裝就不多說了,以后有機會我也開源出來。這邊文章主要講的就是如何解決模糊問題。

  網上有很多文章解釋為什么會模糊,都寫得很好,大家可以參考下面的博文:

  http://www.cnblogs.com/lixlib/archive/2012/11/27/2790243.html

  我主要做點補充:

  1、繪制線條時,采用線條中點定位的方式,所以造成模糊,剛才引用的博文也說得很清楚,只需要坐標偏移到0.5,那么1px寬度的線條就不會出現模糊,

  比如畫一個矩形邊框,那么正確的做法就是x和y各偏移0.5,高和寬各縮小1即可,比如,我們要繪制一個20*30的矩形,就應該使用ctx.strokeRect(0.5,0.5,20,30)

  2、填充矩形,這個和繪制線條又不一樣了,給定的坐標就真的是填充的邊界,比如剛才舉的例子,ctx.fillRect(0.5,0.5,20,30),如果這樣調用,肯定是會模糊的

  所以這個時候就應該改成ctx.fillRect(0,0,20,30)

  

  canvas繪制模糊的問題,網上有很多大牛已經發過很多文章了,但是提到fillRect的並不多,希望我分享的能幫到大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM