2013-05-22 30 views
0

我正在研究一個更大的Web應用程序,它使用畫布來渲染形狀。現在我遇到了渲染未填充矩形的問題(stroke: '#fff', fill: false):它們始終具有1px的邊框半徑。我能夠用一個小例子重現它;當我設置rx: -1, ry: -1圓角半徑走了,但也有明顯的點(因爲像素被塗兩次):fabric.js:爲什麼邊界半徑爲1px當stroke:true,fill:false

http://jsfiddle.net/NmWvY/1/

黑色矩形是與rx: 0, ry: 0,紅色是rx: -1, ry: -1

我該如何解決這個問題?

問候,
CK

回答

1

通過FabricJS源尋找,這是fabric.Rect對象是如何得出:

... 
ctx.moveTo(x+rx, y); 
ctx.lineTo(x+w-rx, y); 
ctx.quadraticCurveTo(x+w, y, x+w, y+ry, x+w, y+ry); 
ctx.lineTo(x+w, y+h-ry); 
ctx.quadraticCurveTo(x+w,y+h,x+w-rx,y+h,x+w-rx,y+h); 
ctx.lineTo(x+rx,y+h); 
ctx.quadraticCurveTo(x,y+h,x,y+h-ry,x,y+h-ry); 
ctx.lineTo(x,y+ry); 
ctx.quadraticCurveTo(x,y,x+rx,y,x+rx,y); 
ctx.closePath(); 
... 
this._renderStroke(ctx); 

即,rxry不存在或存在不阻止的路徑從被製造出來,因此被撫摸。即使rxry爲空,它們的默認值爲0

strokeWidth屬性設置與其中當stroke不是falsenull路徑被撫摸lineWidth

您可以try changing strokeWidth更改斯托克的寬度。目前還不十分清楚,始終有寬度爲1px的筆畫究竟出現了什麼問題,但這應該有所幫助。

+0

這實際上解決了這個問題;在fabric.js中似乎有某處存在錯誤的錯誤。我想我會調試。謝謝。 – ckruse

+1

我懷疑這是因爲'quadraticCurveTo'和子像素渲染。一旦你縮小了一些形狀,這似乎不會發生。我更新了小提琴,使黑色矩形2x縮放(並將織物從0.9更新爲1.1.16) - http://jsfiddle.net/NmWvY/7/我們可以在rx/ry時避免使用「quadraticCurveTo」來解決這個問題是'0'。請在github上提出問題,當我有機會時,我會盡快解決。 – kangax

+0

@kangax這正是我在修補的fabric.js版本中解決它的原因。我[提交了一個bug](https://github.com/kangax/fabric.js/issues/691)。 – ckruse