国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:28:21
字體:
來源:轉載
供稿:網友

  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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐池县| 南溪县| 乌苏市| 濉溪县| 辽中县| 商洛市| 横山县| 上高县| 临城县| 中山市| 南澳县| 九江市| 色达县| 武威市| 宁河县| 苏尼特左旗| 河北区| 桐城市| 裕民县| 荆门市| 太仆寺旗| 皮山县| 长泰县| 黑山县| 毕节市| 襄樊市| 宜兰县| 始兴县| 南木林县| 鹿泉市| 嘉义市| 封开县| 武邑县| 桐城市| 格尔木市| 阳西县| 集安市| 仙桃市| 河东区| 济阳县| 莱州市|