WPF 如何畫出1畫素的線

2021-08-04 03:26:42 字數 2310 閱讀 2562

如何有人告訴你,請你畫出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...