<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # IronPython Mono Winforms 中的繪圖 II > 原文: [http://zetcode.com/tutorials/ironpythontutorial/paintingII/](http://zetcode.com/tutorials/ironpythontutorial/paintingII/) 在 IronPython Mono Winforms 教程的這一部分中,我們將繼續繪圖。 ## 甜甜圈 在下面的示例中,我們通過旋轉一堆橢圓來創建復雜的形狀。 `donut.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Drawing import Size, Color, SolidBrush, Pen class IForm(Form): def __init__(self): self.Text = 'Donut' self.Size = Size(350, 300) self.Paint += self.OnPaint self.CenterToScreen() def OnPaint(self, event): g = event.Graphics pen = Pen(Color.Gray, 1) size = self.ClientSize g.TranslateTransform(size.Width/2, size.Height/2) g.DrawEllipse(pen, -125, -125, 250, 250) for i in range(0, 36): g.DrawEllipse(pen, 0, 0, 120, 50) g.RotateTransform(10) g.Dispose() Application.Run(IForm()) ``` 我們在表格上畫了五行。 每行具有不同的`DashStyle`。 ```py size = self.ClientSize g.TranslateTransform(size.Width/2, size.Height/2) g.DrawEllipse(pen, -125, -125, 250, 250) ``` 我們在表格中間畫一個圓。 ```py for i in range(0, 36): g.DrawEllipse(pen, 0, 0, 120, 50) g.RotateTransform(10) ``` 我們繪制 36 個橢圓,每個橢圓在最后一個橢圓之后旋轉 10 度。 從而得到甜甜圈的對象。 ![Donut](https://img.kancloud.cn/56/15/5615e989dd42b7071ce6ae0723f790a2_350x301.jpg) 圖:多納圈 ## 透明矩形 透明性是指能夠透視材料的質量。 了解透明度的最簡單方法是想象一塊玻璃或水。 從技術上講,光線可以穿過玻璃,這樣我們就可以看到玻璃后面的物體。 在計算機圖形學中,我們可以使用 alpha 合成來實現透明效果。 Alpha 合成是將圖像與背景組合以創建部分透明外觀的過程。 合成過程使用 Alpha 通道。 (wikipedia.org,answers.com) `transparentrectangles.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Drawing import Size, Color, SolidBrush class IForm(Form): def __init__(self): self.Text = 'Transparent rectangles' self.Size = Size(590, 110) self.Paint += self.OnPaint self.CenterToScreen() def OnPaint(self, event): g = event.Graphics for i in range(1, 11): color = Color.FromArgb(i*25, 0, 0, 255) brush = SolidBrush(color) g.FillRectangle(brush, 50*i, 20, 40, 40) Application.Run(IForm()) ``` 在示例中,我們將繪制十個具有不同透明度級別的矩形。 ```py color = Color.FromArgb(i*25, 0, 0, 255) ``` 該行創建一個顏色對象。 第一個值是 Alpha 透明度。 ```py brush = SolidBrush(color) ``` 我們用顏色創建畫筆。 ```py g.FillRectangle(brush, 50*i, 20, 40, 40) ``` 我們畫一個矩形。 ![Transparent rectangles](https://img.kancloud.cn/2d/2b/2d2ba8bf05c9c7ad7369fe0ad55124f4_590x111.jpg) 圖:透明矩形 ## 灰度圖像 下面的示例創建一個灰度圖像。 `grayscale.py` ```py #!/usr/bin/ipy import clr import sys clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Drawing import Size, Rectangle from System.Drawing import Bitmap, Color class IForm(Form): def __init__(self): self.Text = 'Grayscale' self.Size = Size(290, 150) self.Paint += self.OnPaint self.rotunda = self.loadImage() self.gs = self.grayScale(self.rotunda.Clone()) self.CenterToScreen() def loadImage(self): try: rotunda = Bitmap("rotunda.jpg") return rotunda except Exception, e: print e.msg sys.exit(1) def grayScale(self, image): w = image.Width h = image.Height for i in range(w): for j in range(h): c = image.GetPixel(i, j) lum = 0.299*c.R + 0.587*c.G + 0.114*c.B image.SetPixel(i, j, Color.FromArgb(lum, lum, lum)) return image def OnPaint(self, event): g = event.Graphics r1 = Rectangle(15, 15, self.rotunda.Width, self.rotunda.Height) g.DrawImage(self.rotunda, r1) r2 = Rectangle(150, 15, self.gs.Width, self.gs.Height) g.DrawImage(self.gs, r2) g.Dispose() Application.Run(IForm()) ``` 我們的示例中有兩個圖像。 一種顏色和一種灰度。 ```py self.rotunda = self.loadImage() ``` `loadImage()`方法從磁盤的當前工作目錄加載位圖。 ```py self.gs = self.grayScale(self.rotunda.Clone()) ``` `grayScale()`方法從彩色圖像制作灰度圖像。 我們將圓形大廳圖像的副本作為此方法的參數。 ```py c = image.GetPixel(i, j) ``` 我們從圖像中獲得所有像素。 ```py lum = 0.299*c.R + 0.587*c.G + 0.114*c.B ``` 該方程式計算灰度圖像的亮度。 如果我們使用這些因素來縮放顏色的紅色,綠色和藍色部分,則人眼會將圖像視為灰色。 ```py image.SetPixel(i, j, Color.FromArgb(lum, lum, lum)) ``` 我們修改像素。 ## 漸變 在計算機圖形學中,漸變是從淺到深或從一種顏色到另一種顏色的陰影的平滑混合。 在 2D 繪圖程序和繪圖程序中,漸變用于創建彩色背景和特殊效果以及模擬燈光和陰影。 (answers.com) `gradients.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Drawing import Size, Color, Point from System.Drawing.Drawing2D import LinearGradientBrush class IForm(Form): def __init__(self): self.Text = 'Gradients' self.Size = Size(350, 350) self.Paint += self.OnPaint self.CenterToScreen() def OnPaint(self, event): g = event.Graphics pt1 = Point(5, 5) pt2 = Point(25, 25) lg = LinearGradientBrush(pt1, pt2, Color.Red, Color.Black) g.FillRectangle(lg, 20, 20, 300, 40) pt1 = Point(5, 25) pt2 = Point(20, 2) lg = LinearGradientBrush(pt1, pt2, Color.Yellow, Color.Black) g.FillRectangle(lg, 20, 80, 300, 40) pt1 = Point(5, 25) pt2 = Point(2, 2) lg = LinearGradientBrush(pt1, pt2, Color.Green, Color.Black) g.FillRectangle(lg, 20, 140, 300, 40) pt1 = Point(25, 25) pt2 = Point(15, 25) lg = LinearGradientBrush(pt1, pt2, Color.Blue, Color.Black) g.FillRectangle(lg, 20, 200, 300, 40) pt1 = Point(0, 10) pt2 = Point(0, 20) lg = LinearGradientBrush(pt1, pt2, Color.Orange, Color.Black) g.FillRectangle(lg, 20, 260, 300, 40) lg.Dispose() g.Dispose() Application.Run(IForm()) ``` 我們繪制五個矩形,這些矩形填充有不同的線性漸變。 ```py pt1 = Point(5, 5) pt2 = Point(25, 25) ``` 這兩個是線性漸變畫筆的控制點。 ```py lg = LinearGradientBrush(pt1, pt2, Color.Red, Color.Black) ``` 我們創建`LinearGradientBrush`對象。 我們使用兩個控制點和兩種混合顏色。 ![Gradients](https://img.kancloud.cn/8a/81/8a81df45c2ba86502f7cf44e9dac321a_350x351.jpg) 圖:漸變 ## 等待 在此示例中,我們使用透明效果創建一個等待演示。 我們將繪制 8 條線,這些線將逐漸消失,從而產生一種錯覺,即一條線在移動。 這種效果通常用于通知用戶,一項艱巨的任務正在幕后進行。 一個示例是通過互聯網流式傳輸視頻。 `waiting.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, Timer from System.Drawing import Size, Color, SolidBrush, Pen from System.Drawing.Drawing2D import SmoothingMode, LineCap from System.ComponentModel import Container trs = ( ( 0, 35, 70, 100, 150, 180, 210, 250 ), ( 250, 0, 35, 70, 100, 150, 180, 210 ), ( 210, 250, 0, 35, 70, 100, 150, 180 ), ( 180, 210, 250, 0, 35, 70, 100, 150 ), ( 150, 180, 210, 250, 0, 35, 70, 100 ), ( 100, 150, 180, 210, 250, 0, 35, 70 ), ( 70, 100, 150, 180, 210, 250, 0, 35 ), ( 35, 70, 100, 150, 180, 210, 250, 0 ) ) class IForm(Form): def __init__(self): self.Text = 'Waiting' self.Size = Size(250, 150) self.Paint += self.OnPaint self.count = 0 self.timer = Timer(Container()) self.timer.Enabled = True self.timer.Interval = 80 self.timer.Tick += self.OnTick self.CenterToScreen() def OnTick(self, sender, event): self.count = self.count + 1 self.Refresh() def OnPaint(self, event): g = event.Graphics g.SmoothingMode = SmoothingMode.AntiAlias size = self.ClientSize g.TranslateTransform(size.Width/2, size.Height/2) for i in range(0, 8): color = Color.FromArgb(trs[self.count%8][i], 30, 30, 30) pen = Pen(color, 3) pen.StartCap = LineCap.Round pen.EndCap = LineCap.Round g.DrawLine(pen, 0, -10, 0, -40) g.RotateTransform(45) pen.Dispose() g.Dispose() Application.Run(IForm()) ``` 我們用八個不同的 alpha 值繪制八條線。 ```py self.timer = Timer(Container()) self.timer.Enabled = True self.timer.Interval = 80 self.timer.Tick += self.On ``` 我們使用`Timer`制作動畫。 ```py trs = ( ( 0, 35, 70, 100, 150, 180, 210, 250 ), ... ) ``` 這是此演示中使用的透明度值的二維集合。 有 8 行,每行一種狀態。 8 行中的每行將連續使用這些值。 ```py pen = Pen(color, 3) pen.StartCap = LineCap.Round pen.EndCap = LineCap.Round ``` 我們使線條更粗一些,以便更好地顯示它們。 我們用帶帽的線畫線。 ```py color = Color.FromArgb(trs[self.count%8][i], 30, 30, 30) ``` 在這里,我們定義了一條線的透明度值。 ```py g.DrawLine(pen, 0, -10, 0, -40) g.RotateTransform(45) ``` 我們畫了 8 條線。 它們順時針旋轉。 ![Waiting](https://img.kancloud.cn/06/65/06658a3d8af3ec3ca366056e9fc27e88_250x151.jpg) 圖:等待 在 IronPython Winforms 教程的這一章中,我們在 Mono Winforms 庫中做了一些更高級的繪圖。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看