如何有人告訴你,請你畫出1畫素的線,是不是覺得很簡單,實際上在 wpf 上還是比較難的。
畫出線的第乙個方法,建立乙個 canvas ,新增乙個線
介面**
x:name="canvas">
canvas>
在後台新增一條線
line myline = new line();
myline.stroke = system.windows
.media
.brushes
.black
; myline.x1 = 100
; myline.x2 = 200
; // 150 too far
myline.y1 = 200
; myline.y2 = 200
; myline.strokethickness = 1
; canvas.children
.add(myline);
那麼如何看到線模糊呢?
簡單方法是使用 viewbox 和放大鏡,可以看到模糊
在介面新增下面**
x:name="canvas">
canvas>
viewbox>
這時拖動視窗可以看到線放大
可以看到線是模糊的,如果想要讓線不模糊,可以新增下面的**
myline.snapstodevicepixels = true;
myline.setvalue(renderoptions.edgemodeproperty, edgemode.aliased);
這個方法是從 [得到,但是無法對於自己的控制項
如果自己建立乙個控制項,那麼直接使用 dc.drawline 得到不是清晰的
建立乙個類自定義控制項,新增下面的**畫出線
protected
override
void
onrender(drawingcontext dc)
可以看到,畫出來的線是模糊的,於是看了微軟的**
看了他的矩形是如何畫的,看到他畫出來的是清晰的,但是複製他的**到我的控制項,畫出來不是清晰的
///
/// render callback.
///protected
override
void
onrender(drawingcontext drawingcontext)
下面**是我複製他的,但是自己的控制項畫出來在放大時,線模糊,所以直接複製是無法做到wr的矩形那樣
protected
override
void
onrender(drawingcontext dc)
在介面畫出來wr 的矩形和自定義控制項,可以看到,微軟的是清晰的
那麼是不是wr 做了特殊的東西,到現在還不知道,但是找到了乙個方法,可以畫出清晰
縮小看到的是這樣
那麼放大時就是下面這張圖
所以需要在放大時,也畫乙個畫素,
這個方法就是本文,所以這是在翻譯,只是沒有使用對所有的文字翻譯,來自工藤大神的方法。
本文使用的方法很簡單,第一步
複製方法到乙個靜態類
public
static
void
pen pen, double linethickness, params point points)
var half = linethickness / 2;
points = points.select(p => new point(p.x + half, p.y + half)).toarray();
dc.pushguidelineset(guidelineset);
for (var i = 0; i < points.length - 1; i = i + 2)
dc.pop();
}
然後就可以在自定義控制項使用下面的**
protected
override
void
onrender(drawingcontext dc));}
可以看到線是清晰的
參見:
WPF 如何畫出1畫素的線
原文 wpf 如何畫出1畫素的線 如何有人告訴你,請你畫出1畫素的線,是不是覺得很簡單,實際上在 wpf 上還是比較難的。畫出線的第乙個方法,建立乙個 canvas 新增乙個線 介面 x name canvas canvas 在後台新增一條線 line myline new line myline....
WPF 如何畫出1畫素的線
如何有人告訴你,請你畫出1畫素的線,是不是覺得很簡單,實際上在 wpf 上還是比較難的。畫出線的第乙個方法,建立乙個 canvas 新增乙個線 介面 x name canvas canvas 在後台新增一條線 line myline new line myline.stroke system.win...
手機1畫素線粗 實現移動端1畫素線 stylus
1px的邊框實現思路 給準備加1px的元素相對定位 給該元素加乙個偽元素,給偽元素乙個絕對定位 然後把元素的寬高按照dpr相對應的倍數等比例縮放。css3中的transfrom scale 下邊用stylus實現移動端的1畫素邊框 border border width 1px,border col...