天天看點

html5 canvas畫不出圖像的原因

          很久沒寫部落格了,今年過年的時候,家裡出了意外,現在心裡依然很難受。6月份之前一直忙着寫畢業論文,答辯完6月初回公司繼續上班,今天剛好周末有空,就寫下之前碰到一個問題。

        做一個圖像檢視器(基于Chrome浏覽器),可以旋轉縮放,在一位同僚的代碼的基礎上進行修改,因為同僚使用了html5中的canvas,不過他那邊最大放大倍數隻有3倍,而我這邊最大放大倍數為8倍,這樣,問題就出現了,測試人員A把某一張圖像放大到第8倍的時候,圖像突然不見了,而她說在另外一個測試人員B的電腦上測試則不會出現圖像消失,我猜想會不會是浏覽器版本不同的原因,因為在我這邊不會出現這個問題,我的浏覽器版本是26....,而測試人員A的浏覽器版本是28...。我在開發人員C的浏覽器上進行測試,他的版本也是28....,他的也不會出現消失的情況,然後去了組長的浏覽器測試,他的浏覽器版本跟我一樣是26...,組長的也出現圖像消失,這樣排除了浏覽器版本産生的原因。後來,我在測試人員A的浏覽器用比較小的圖像測試,不會出現消失,在我的浏覽器上用一張很大的圖像,大于1440X900,放大到第八倍,也沒有出現消失,想到做下壓力測試,放大個20倍試試,還不會消失,再試試60倍,圖像消失了。從這裡可以看出,圖像大小及放大倍數與圖像消失是有關系的。

        我們的電腦的硬體配置是一樣的,是以暫時想不出什麼原因,在網上搜尋canvas畫圖的相關資料,看到有些說用GPU加速canvas的,後來發現Chrome也有支援硬體加速畫布的選項,因為學過GPU加速,CUDA程式設計,知道有時候使用GPU加速反而慢了,因為資料傳輸帶寬存在瓶頸,大家的顯示卡都用Intel的內建GPU(測試人員A的另一個電腦使用帶NVidia GPU晶片的獨立顯示卡,不會出現消失的情況,而且速度很快),然後在stackoverflow上找到一個評論,說在Chrome GPU設定上把支援硬體加速畫布停用,就可以,嘗試後,發現之前出現圖像消失的浏覽器确實不會再出現圖像消失了,(可以看出硬體加速不一定就快了)。但是現在還是不懂的是,為什麼大家的硬體配置一樣,浏覽器的設定一樣,為什麼有些會消失,有些不會,本來想繼續測試,看到底是哪部分不同,之前用GPU-Z.0.7.2檢視了顯示卡的資訊,及使用情況,沒有差別,現在猜想可能是由于在canvas畫圖的時候,資料還沒有傳到GPU端,是以就沒畫出來。

        雖然在浏覽器上進行設定解決了圖像消失的問題,但是組長覺得設定浏覽器的方式不太好,是以最後另一位同僚采用CSS3寫了圖像的旋轉與縮放,不會出現消失的問題,代碼相對也簡潔很多,而且即使放到100倍也沒問題。

繼續閱讀