文本銜接使用DrawingVisual繪圖
效果圖
漸變色可以將多個顏色組合在一塊,形成漸變色。
不過當顏色組合非常有規律時,就不是漸變色的變現形式了。
例如【0 0.25, 0.25 0.5, 0.5 0.75 ,0.75 1】每兩個一組,就會會變成獨立的顏色塊。
利用這個特性,我們可以不必使用上文中第二種方式(每一個矩形一個顏色,相當於繪製了大量獨立的矩形塊),使用線組合的矩形就可以模擬獨立矩形塊了。
比如說簡單的畫一個圓
應用漸變色的算法
public LinearGradientBrush lgb = new LinearGradientBrush() { StartPoint=new Point(0.5,0),EndPoint= new Point(0.5, 1) };//垂直拜訪 public void SetLinerColor() { lgb.GradientStops.Clear(); for (double y = 0; y < 1.0;) { var color = DrawSetting.Instance.GetColorBrush(); lgb.GradientStops.Add(new GradientStop(color, y)); lgb.GradientStops.Add(new GradientStop(color, y += (RectHeight / DrawHeight))); } }
繪圖時直接用lgb即可,其次再往後修改顏色不用重新繪製圖形,只用修改顏色即可
簡單寫的小算法,不一定什麼情況下都好使。
如果哪位大佬能給改改算法,那就更好了,腦子轉不過來了...具體是XY位置確認某組顏色的算法..
圓的算法
其中
圓的算法是極座標算法
20是每組矩形【內部矩形】的數量,寬10,高200,一個矩形上到下排列20個
80是橫向排列的最大數量,橫向80個,總共3行,共240組。
d爲Y座標對20取商數,即爲是在第幾行。
k爲是第某組的第幾個,或者可以用【餘數】
n爲第幾組矩形
xa爲xy座標轉到具體每組的算法,2N+1,每組共40個顏色,每兩個一對,(0,1)(2,3)(4,5)(6,7)。。。類推,這個公式應該還可以用別的方式。
for (int j = 2; j < 15; j++) { for (int i = 0; i <= 360; i++) { var ra = i * 3.14 / 180; int x1 = (int)(40 + (j * Math.Cos(ra))); int y1 = (int)(40 + (j * Math.Sin(ra))); if (!PointList.Contains(new Point(x1, y1))) { PointList.Add(new Point(x1, y1)); //await Task.Delay(30); } } } foreach (var item in PointList) { var x = (int)item.X; var y = (int)item.Y; var d = y / 20; var k = 20 - ((d + 1) * 20 - y); var n = (d) * 80 + x; var xa = 2 * k + 1; (draw.Visuals[n] as RectByLineDrawVisual).lgb.GradientStops[y == 0 ? 0 : xa - 1].Color = Colors.Transparent; (draw.Visuals[n] as RectByLineDrawVisual).lgb.GradientStops[y == 0 ? 1 : xa].Color = Colors.Transparent; await Task.Delay(3); }