国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - WPF InkCanvas繪制矩形和橢圓

WPF InkCanvas繪制矩形和橢圓

2022-03-06 13:24有個家伙喜歡代碼 C#

這篇文章主要為大家詳細介紹了WPF InkCanvas繪制矩形和橢圓,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前面說到了inkcanvas的基本操作,這里用一個實例來說明具體應用:繪制矩形和橢圓。

效果圖

WPF InkCanvas繪制矩形和橢圓

xaml代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<window x:class="wpf_inkcanvas.roi_inkcanvas"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:wpf_inkcanvas"
    mc:ignorable="d"
    title="roi_inkcanvas" height="450" width="800">
  <grid>
    <grid.rowdefinitions>
      <rowdefinition/>
      <rowdefinition height="auto"/>
    </grid.rowdefinitions>
    <image name="imgmeasure" horizontalalignment="center" stretch="uniform"/>
    <inkcanvas name="inkcanvasmeasure" editingmode="none" background="transparent" strokes="{binding inkstrokes, mode=twoway}" horizontalalignment="center"
          width="{binding elementname=imgmeasure, path=actualwidth}" height="{binding elementname=imgmeasure, path=actualheight}"
          mousedown="inkcanvasmeasure_mousedown" mousemove="inkcanvasmeasure_mousemove">
      <label content="{binding meainfo}" background="transparent" horizontalalignment="left" verticalalignment="top" margin="10"
          fontsize="18" foreground="red" ishittestvisible="false"/>
    </inkcanvas>
    <stackpanel grid.row="1" orientation="horizontal">
      <button content="openfile" margin="5" horizontalalignment="left" fontsize="20" click="openfile_click"/>
      <togglebutton name="btnsquare" content="draw square" margin="5" horizontalalignment="left" fontsize="20" click="drawsquare_click"/>
      <togglebutton name="btnellipse" content="draw ellipse" margin="5" horizontalalignment="left" fontsize="20" click="drawellipse_click"/>
    </stackpanel>
  </grid>
</window>

后臺代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using microsoft.win32;
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows;
using system.windows.controls;
using system.windows.data;
using system.windows.documents;
using system.windows.ink;
using system.windows.input;
using system.windows.media;
using system.windows.media.imaging;
using system.windows.shapes;
 
namespace wpf_inkcanvas
{
  /// <summary>
  /// roi_inkcanvas.xaml 的交互邏輯
  /// </summary>
  public partial class roi_inkcanvas : window
  {
    private viewmodel viewmodel;
    private system.windows.point inip;
    public roi_inkcanvas()
    {
      initializecomponent();
 
      drawingattributes drawingattributes = new drawingattributes
      {
        color = colors.red,
        width = 2,
        height = 2,
        stylustip = stylustip.rectangle,
        //fittocurve = true,
        ishighlighter = false,
        ignorepressure = true,
 
      };
      inkcanvasmeasure.defaultdrawingattributes = drawingattributes;
 
      viewmodel = new viewmodel
      {
        meainfo = "測試······",
        inkstrokes = new strokecollection(),
      };
 
      datacontext = viewmodel;
    }
 
    private void openfile_click(object sender, routedeventargs e)
    {
      openfiledialog opendialog = new openfiledialog
      {
        filter = "image files (*.jpg)|*.jpg|image files (*.png)|*.png|image files (*.bmp)|*.bmp",
        title = "open image file"
      };
      if (opendialog.showdialog() == true)
      {
        bitmapimage image = new bitmapimage();
        image.begininit();
        image.urisource = new uri(opendialog.filename, urikind.relativeorabsolute);
        image.endinit();
        imgmeasure.source = image;
      }
    }
 
    private void drawsquare_click(object sender, routedeventargs e)
    {
      if (btnsquare.ischecked == true)
      {
        btnellipse.ischecked = false;
      }
    }
 
    private void drawellipse_click(object sender, routedeventargs e)
    {
      if (btnellipse.ischecked == true)
      {
        btnsquare.ischecked = false;
      }
    }
 
    private list<system.windows.point> generateeclipsegeometry(system.windows.point st, system.windows.point ed)
    {
      double a = 0.5 * (ed.x - st.x);
      double b = 0.5 * (ed.y - st.y);
      list<system.windows.point> pointlist = new list<system.windows.point>();
      for (double r = 0; r <= 2 * math.pi; r = r + 0.01)
      {
        pointlist.add(new system.windows.point(0.5 * (st.x + ed.x) + a * math.cos(r), 0.5 * (st.y + ed.y) + b * math.sin(r)));
      }
      return pointlist;
    }
    private void inkcanvasmeasure_mousedown(object sender, mousebuttoneventargs e)
    {
      if (e.leftbutton == mousebuttonstate.pressed)
      {
        inip = e.getposition(inkcanvasmeasure);
      }
    }
 
    private void inkcanvasmeasure_mousemove(object sender, mouseeventargs e)
    {
      if (e.leftbutton == mousebuttonstate.pressed)
      {
        // draw square
        if (btnsquare.ischecked == true)
        {
          system.windows.point endp = e.getposition(inkcanvasmeasure);
          list<system.windows.point> pointlist = new list<system.windows.point>
          {
            new system.windows.point(inip.x, inip.y),
            new system.windows.point(inip.x, endp.y),
            new system.windows.point(endp.x, endp.y),
            new system.windows.point(endp.x, inip.y),
            new system.windows.point(inip.x, inip.y),
          };
          styluspointcollection point = new styluspointcollection(pointlist);
          stroke stroke = new stroke(point)
          {
            drawingattributes = inkcanvasmeasure.defaultdrawingattributes.clone()
          };
          viewmodel.inkstrokes.clear();
          viewmodel.inkstrokes.add(stroke);
        }
        // draw eclipse
        else if (btnellipse.ischecked == true)
        {
          system.windows.point endp = e.getposition(inkcanvasmeasure);
          list<system.windows.point> pointlist = generateeclipsegeometry(inip, endp);
          styluspointcollection point = new styluspointcollection(pointlist);
          stroke stroke = new stroke(point)
          {
            drawingattributes = inkcanvasmeasure.defaultdrawingattributes.clone()
          };
          viewmodel.inkstrokes.clear();
          viewmodel.inkstrokes.add(stroke);
        }
      }
    }
  }
}

viewmodel.cs代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using system;
using system.collections.generic;
using system.componentmodel;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.ink;
 
namespace wpf_inkcanvas
{
  class viewmodel : inotifypropertychanged
  {
    public event propertychangedeventhandler propertychanged;
 
    protected virtual void onpropertychanged(string propertyname = null)
    {
      if (propertychanged != null)
        propertychanged.invoke(this, new propertychangedeventargs(propertyname));
    }
 
    private string meainfo;
    public string meainfo
    {
      get => meainfo;
      set
      {
        meainfo = value;
        onpropertychanged("meainfo");
      }
    }
 
    private strokecollection inkstrokes;
    public strokecollection inkstrokes
    {
      get { return inkstrokes; }
      set
      {
        inkstrokes = value;
        onpropertychanged("inkstrokes");
      }
    }
  }
}

補充說明:為什么要注釋掉畫筆屬性//fittocurve = true,可以自行體會下不注釋會是個什么效果;將inkcanvas的strokes綁定到變量有好處,在別的窗口也能獲取到這個對象的哦,因為它是在viewmodel里的,傳viewmodel參數就可以了;橢圓繪制完成后設置inkcanvas的edittingmode為select就可以修改大小和形狀。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u012366767/article/details/81266406

延伸 · 閱讀

精彩推薦
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: 久久精品亚洲 | 玖玖精品| 日韩成人| 亚洲自拍偷拍精品 | 在线观看一区二区三区四区 | 中文成人在线 | 欧美视频成人 | 亚洲午夜av久久乱码 | 久久99精品国产麻豆婷婷洗澡 | 色综合网址 | 一道本一二三区 | 中文字幕乱码亚洲精品一区 | 国产日韩欧美 | 日韩一区二区三区视频 | 成人a级网站 | 狠狠av | 欧美永久精品 | 观看av| 久久成人免费视频 | 玖玖精品 | 久久精品2019中文字幕 | 亚洲啪啪网站 | 成人在线视频一区 | 国产精品黄色 | 精品视频一区二区三区 | 日本一区二区精品 | 国产黄色91视频 | 亚洲精品久久久久久国产精华液 | 色婷婷综合在线 | 欧美中文字幕一区 | 你懂的免费在线观看 | 一区视频| 国产精品极品美女在线观看免费 | 亚洲成av人片在线观看无码 | 欧美日韩国产在线 | 久久精品亚洲精品国产欧美kt∨ | 欧美激情区 | 91午夜理伦私人影院 | 国产欧美日韩精品一区 | av中文字幕观看 | 成人午夜视频在线播放 |