C#網路應用編程基礎練習題與答案(九)

來源:互聯網
上載者:User
編程|網路

  1. 簡述三類二維座標系統之間的相同點和區別。

  【解答】

  GDI+中的二維笛卡兒座標系統分為三類:全域座標系統、頁面座標系統和裝置座標系統。

  三類座標系統的相同點:它們都有座標原點以及向右和向下的x軸和y軸。

  三類座標系統的區別:全域座標系統可以進行旋轉、平移等操作。頁面座標系統與裝置座標系統都是以裝置的左上方為座標原點,X水平向右為正,Y垂直向下為正。頁面座標系統與裝置座標系統的差異在於X,Y的單位不同:頁面座標系中的X,Y單位可以任意設定,如英寸、毫米等;而裝置座標系中,只有一種單位,那就是點(point)或者像素(pixel)。頁面座標系是不能更改的,它是一個參照標準,將全域座標最終轉換為裝置座標。

  2. 簡述建立Graphics類對象的三種方法。

  【解答】

  (1) 在表單或控制項的Paint事件中直接引用Graphics對象。在為表單建立繪製代碼時,一般使用此方法擷取對映像的引用。

  (2) 從當前表單擷取對Graphics對象的引用。注意這種對象只有在處理當前Windows表單訊息的過程中有效。如果想在已經存在的表單或控制項中繪圖,可以使用此種方法。

  (3) 從繼承自映像的任何對象建立Graphics對象。這個方法適用於需要更改已經存在的

  映像。

  3. 同時建立多個矩形並用紅黑相間的顏色進行填充。

  【解答】

  (1) 建立一個Windows應用程式,命名為“FillMultiRectangle”,調整表單到適當大小。更改“Form1.cs”為“FormFillMultiRectangle.cs”。

  (2) 切換到代碼方式,添加名稱空間引用:

  using System.Drawing.Drawing2D;

  (3) 雙擊表單的屬性面板裡事件頁中的Paint事件,添加FormFillMultiRectangle_Paint事件代碼。

  private void FormFillMultiRetangle_Paint(object sender, PaintEventArgs e)
  {
   Graphics g = e.Graphics;
  HatchBrush mybrush=new HatchBrush (HatchStyle.Cross,Color .Red,Color .Black);
  Rectangle[] rect=
  {
  new Rectangle( 0, 0, 50, 100),
  new Rectangle(50,100, 100, 50),
  new Rectangle(150, 150, 50, 100),
  };
  g.FillRectangles(mybrush, rect);
  g.Dispose();
  }

  (4) 結果如圖所示。

  4. 使用Label控制項分別以矩形、橢圓和圓形的方式顯示圖片,並保證圖片完全由繪製對象的邊框決定。

  【解答】

  (1)建立一個Windows應用程式,命名為“ShowImageExe”,調整表單到適當大小。更改“Form1.cs”為“FromShowImageExe.cs”。

  (2)切換到代碼方式,添加名稱空間引用:

  using System.Drawing.Drawing2D;

  (3) 添加四個Button控制項分別命名為“buttonOpenFile”、“buttonRectangle”、“buttonEllipse”、“buttonRound”,以及一個openFileDiolog和label控制項。

  (4)在Form類下聲明兩個私人變數filename和flag,分別用來記錄開啟的檔案名稱和判斷哪個按鈕的click時間被觸發。

  private string filename = "";

  private int flag = 0;

  (5) 添加【開啟檔案】按鈕的click事件

  private void buttonOpenFile_Click(object sender, EventArgs e)
  {
  openFileDialog1.ShowDialog();
  filename = openFileDialog1.FileName;
  label1.Refresh();
  }

  (6) 在label1控制項的paint事件下添加如下代碼:

  private void label1_Paint(object sender, PaintEventArgs e)
  {
  if (filename.Trim() == "")
  return;
  Bitmap mybitmap = new Bitmap(filename);
  Graphics g = e.Graphics;
  TextureBrush mybrush = new TextureBrush(mybitmap,WrapMode.Clamp);
  //保證圖片完全由繪製對象的邊框決定
  switch (flag)
  {
  case 1:
  g.FillRectangle(mybrush, label1.ClientRectangle);
  break;
  case 2:
  g.FillEllipse(mybrush, label1.ClientRectangle);
  break;
  case 3:
  g.FillEllipse(mybrush, (label1.Width- label1.Height)/2,0, label1.Height, label1.Height);
  break;
  }
  }

  (7) 在其他幾個按鈕的click事件中分別添加如下代碼:

  private void buttonRectangle_Click(object sender, EventArgs e)
  {
  flag = 1;
  label1.Refresh();
  }
  private void buttonEllipse_Click(object sender, EventArgs e)
  {
  flag = 2;
  label1.Refresh();
  }
  private void buttonRound_Click(object sender, EventArgs e)
  {
  flag = 3;
  label1.Refresh();
  }

  

  (8) 結果如圖所示。

  5. 利用PictureBox控制項和Panel控制項實現使用捲軸瀏覽大圖片。

  【解答】

  由於Picturebox控制項在顯示圖片時不能直接使用捲軸,所以必須藉助Panel控制項實現以捲軸的方式瀏覽大圖片。具體操作步驟如下:

  (1)建立一個Windows應用程式,命名為“scrollBar”,調整表單到適當大小。更改“Form1.cs”為“FormScrollBar.cs”。

  (2)切換到代碼方式,添加名稱空間引用:

  using System.Drawing.Drawing2D;

  (3) 在表單上分別添加一個button控制項命名為“buttonOpenFile”,一個openFileDiolog控制項,Picturebox和Panel控制項各一個,將Panel控制項的AutoScroll屬性設為true。

  (4) 在“buttonOpenFile”控制項的click事件中添加如下代碼:

  private void buttonOpenFile_Click(object sender, EventArgs e)
  {
  openFileDialog1.ShowDialog();
  if (openFileDialog1.FileName.Trim() == "")
  return;
  try
  {
  Bitmap mybitmap = new Bitmap(openFileDialog1.FileName);
  pictureBox1.Image = mybitmap;
  }
  catch (Exception Err)
  {
  MessageBox.Show("開啟檔案錯誤!", "資訊提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }
  }

  (5) 結果如圖所示。

  

  6. 實現對圖片按任意角度進行旋轉、按任意比例進行縮放、按任意位移進行平移。

  【解答】

  (1) 在表單上添加六個label控制項(其中label1用來顯示圖片)、一個button控制項(用於開啟圖片檔案)和五個numericUpDown控制項(分別用來選擇圖片縮放的比例、圖片旋轉的角度、圖片位移的大小)。

  (2) 在建構函式上方添加代碼:

  private string strfilename="";

  (3) 在button控制項的click事件裡添加如下代碼:

  private void button1_Click(object sender, EventArgs e)
  {
  openFileDialog1.ShowDialog();
  strfilename=openFileDialog1.FileName;
  label1.Refresh();
  }

  (4) 在每一個numericUpDown控制項的ValueChanged事件中添加如下代碼:

  label1.Refresh();

  (5) 在label1控制項的paint事件中添加如下代碼:

  private void label1_Paint(object sender, PaintEventArgs e)
  {
  if (this.strfilename.Trim()=="")
  return ;
  try
  {
  Bitmap mybitmap = new Bitmap(strfilename);
  Graphics g = e.Graphics;
  TextureBrush mybrush = new TextureBrush(mybitmap);
  float x = (float)(numericUpDownS1.Value / 100);
  float y = (float)(numericUpDownS2.Value / 100);
  mybrush.ScaleTransform(x, y);
  g.FillRectangle(mybrush, 0, 0, ClientRectangle.Width, ClientRectangle.Height);
  float r = (float)(numericUpDownR1.Value);
  mybrush.RotateTransform(r);
  g.FillRectangle(mybrush, 0, 0, ClientRectangle.Width, ClientRectangle.Height);
  float tx = (float)(numericUpDownT1.Value);
  float ty = (float)(numericUpDownT2.Value);
  mybrush.TranslateTransform(tx, ty);
  g.FillRectangle(mybrush, 0, 0, ClientRectangle.Width, ClientRectangle.Height);
  }
  catch (Exception Err)
  {
  MessageBox.Show("開啟檔案錯誤!", "資訊提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }
  }

  8-8-6



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。