回答
對於圖片現在有context.imageSmoothingEnabled
= false
。
但是,沒有任何東西明確控制線條繪製。您可能需要使用getImageData
和putImageData
繪製自己的行(the hard way)。
我想知道一個javascript行算法的性能..可能會讓Bresenham在某個時刻出現問題。 – Blorgbeard 2008-10-14 19:32:16
在座標上繪製您的1-pixel
線,如ctx.lineTo(10.5, 10.5)
。在點(10, 10)
上畫一條像素線意味着該位置的這個1
像素從9.5
到10.5
,這導致在畫布上繪製兩條線。
如果你有很多單像素線條,並不總是需要將0.5
添加到你想繪製的實際座標上的一個很好的訣竅就是在開始時對你的整個畫布進行ctx.translate(0.5, 0.5)
。
它可以在Mozilla Firefox中完成。將此代碼添加到您的代碼中:
contextXYZ.mozImageSmoothingEnabled = false;
在Opera中,它目前是功能請求,但希望它很快就會添加。
我會繪製一切使用自定義線算法,如Bresenham的線算法。看看這個JavaScript執行: http://members.chello.at/easyfilter/canvas.html
我認爲這一定會解決您的問題。
ctx.translate(0.5, 0.5);
ctx.lineWidth = .5;
有了這個組合,我可以畫出漂亮的1px細線。
我想補充一點,當縮小圖像和在畫布上繪圖時,我仍然遇到了麻煩,即使它在放大時沒有使用,仍然使用平滑。
我解決了使用此:
function setpixelated(context){
context['imageSmoothingEnabled'] = false; /* standard */
context['mozImageSmoothingEnabled'] = false; /* Firefox */
context['oImageSmoothingEnabled'] = false; /* Opera */
context['webkitImageSmoothingEnabled'] = false; /* Safari */
context['msImageSmoothingEnabled'] = false; /* IE */
}
您可以使用此功能是這樣的:
var canvas = document.getElementById('mycanvas')
setpixelated(canvas.getContext('2d'))
也許這是有用的人。
它必須抗鋸齒矢量圖形
抗鋸齒是需要矢量圖形的正確的繪圖,涉及非整數座標(0.4,0.4),其所有,但很少有客戶會做。
當給定的非整數座標,畫布有兩個選擇:
- 抗鋸齒 - 油漆各地對於座標的像素以多遠整數座標是由非整數1(四捨五入錯誤)。
- Round - 對非整數座標應用一些舍入函數(例如,1.4將變爲1)。
稍後的策略將適用於靜態圖形,儘管對於小圖形(半徑爲2的圓)曲線將顯示明確的步驟而不是平滑的曲線。
真正的問題是圖形被翻譯(移動)時 - 一個像素與另一個像素之間的跳躍(1.6 => 2,1.4 => 1),意味着形狀的原點可能會與父項相關跳轉容器(不斷向上/向下和左/右移動1個像素)。
一些技巧
提示#1:您可以通過縮放畫布軟化(或硬化)抗鋸齒(比如用X),則倒數規模(1/X)適用於幾何形狀自己(不使用畫布)。
比較(無縮放):
與(帆布規模:0.75;手動比例:1.33):
和(帆布規模:1.33;手動規模:0.75):
提示#2:如果鋸齒看起來真的是你以後的樣子,嘗試幾次繪製每個形狀(沒有擦除)。每次繪製時,抗鋸齒像素會變暗。
比較。繪製一次後:
三次拉伸後:
注意到一個非常有限的把戲。如果你想創建一個2色的圖像,你可以在#000000的背景上用顏色#010101繪製你想要的任何形狀。一旦做到這一點,你可以測試在imageData.data []每個像素,並設置爲0xFF任何值不爲0x00:
imageData = context2d.getImageData (0, 0, g.width, g.height);
for (i = 0; i != imageData.data.length; i ++) {
if (imageData.data[i] != 0x00)
imageData.data[i] = 0xFF;
}
context2d.putImageData (imageData, 0, 0);
其結果將是一個非抗鋸齒黑&白畫面。這不會是完美的,因爲會出現一些抗鋸齒功能,但這種抗鋸齒功能將非常有限,形狀的顏色非常像背景的顏色。
- 1. Cocos2d HTML5關閉抗鋸齒
- 2. 關閉HTML Canvas的抗鋸齒仍然不可能?
- 3. 在Löve2D中關閉抗鋸齒功能
- 4. 抗鋸齒像素渲染
- 5. 關於Skia的抗鋸齒
- 6. Font.createFont +抗鋸齒
- 7. 我可以在CSS中設置抗鋸齒功能嗎?
- 8. 我可以在畫布上使用抗鋸齒畫嗎?
- 9. IE10 SVG實現拒絕抗鋸齒<rect>元素?
- 10. 強制Java2D子像素抗鋸齒
- 11. iOS - CAShapeLayer抗鋸齒?
- 12. 抗鋸齒算法
- 13. 抗鋸齒上CAShapeLayers
- 14. 抗鋸齒與GL_TRIANGLE_FAN
- 15. CAShapeLayer禁用抗鋸齒
- 16. Android Studio 2.1 - 我想字體抗鋸齒/平滑關閉
- 17. NSBitmapImageRep中的亞像素抗鋸齒
- 18. CALayer的抗鋸齒圖紙
- 19. ggplot導出的抗鋸齒
- 20. 抗鋸齒的JWindow(形狀)
- 21. ILNumerics中的抗鋸齒
- 22. 可以在Android Canvas上對Drawable禁用抗鋸齒功能嗎?
- 23. Android抗鋸齒和像素貼緊
- 24. 繪製emf抗鋸齒
- 25. 如何關閉Firemonkey的TChart中的抗鋸齒功能?
- 26. Imagemagick抗鋸齒文字
- 27. Pyglet OpenGL繪圖抗鋸齒
- 28. 如何關閉嵌入字體的抗鋸齒
- 29. 如何關閉此Java函數中的文本抗鋸齒?
- 30. Android:如何關閉文本視圖和佈局的抗鋸齒
我認爲這與瀏覽器相關。也許一些關於你使用什麼軟件的額外信息會有幫助。 – Tomalak 2008-10-12 09:37:38
我更喜歡跨瀏覽器的方法,但在任何單個瀏覽器上工作的方法仍然會對我感興趣 – Blorgbeard 2008-10-14 19:31:14
我只想看看這個主題是否還有變化? – vternal3 2011-09-14 11:19:34