2012-04-30 19 views
1

我的第一個問題在這裏。而且我敢肯定,這是一個容易,但我不能在任何地方找到一個解決方案,我讀過很多,只是無法理解,我需要怎麼做:在C中使用PictureBox上的位圖繪圖#

  • 我有一個*。 gif文件,我想在System.Drawing.Bitmap存儲,讓我有機會獲得getPixel()方法
  • 我希望有我的一些控制繪圖(目前嘗試PictureBox

到目前爲止我」 ve得到了:

  • 我從文件創建一個模板,Bitmap - 這工程( map_t代碼)
  • 我創建實際將繪製的位圖(地圖
  • 我可以把我的圖片框圖像爲位圖
    • I 不能改變這個位圖。或者我可以,但結果不顯示
    • 我想我必須從該位圖創建Graphic,然後更改它。我不知道我錯過了什麼。

下面的代碼:MapCanvas是在窗體上的PictureBox,一切都在MouseMove事件,因爲我試圖讓指針周圍的一些圈 - 沒有工作,所以我結束了這段代碼,這也不起作用。我已閱讀每一個問題,我能找到的,沒有什麼幫助...下面的代碼:

namespace Projekt_innowacje 
{ 
    public partial class MapForm : Form 
    { 
     Bitmap map_t; 
     Bitmap map; 

     public MapForm() 
     { 
      InitializeComponent(); 
      map_t = new Bitmap("map.gif", true); 
      map = new Bitmap(map_t.Width, map_t.Height); 
      MapCanvas.Image = map; 
     } 

     private void MapCanvas_MouseMove(object sender, MouseEventArgs e) 
     { 
      Graphics canvas = Graphics.FromImage(map); 
      for (int i = 0; i <= map.Width; i++) 
       for (int j = 0; j <= map.Height; j++) 
        if (map.GetPixel(i, j) == Color.Red) 
         canvas.DrawLine(new Pen(Color.Blue), i, j, i + 1, j + 1); 

         // map.SetPixel(i, j, map.GetPixel(i, j)); // also doesn't work   

      //MapCanvas.Refresh(); 
      MapCanvas.Invalidate(); 

      canvas.Dispose(); 
     } 
    } 
} 
+0

您是否嘗試過使用BMP或JPEG? GIF使用索引顏色,通常不能任意繪製。 – Ani

+0

這不是問題,因爲我只從GIF文件讀取像素。正如你所看到的,我嘗試使用gif文件大小的新空白位圖。 – wasyl

+0

啊,我的錯。 – Ani

回答

1

你是顯示將永遠不會修改畫布/地圖圖像,除非你正在做一些其他的修改map圖像的代碼你沒有分享。在你的循環中你測試map.GetPixel,然而map在構造函數中被創建爲一個空白圖像,所以它的任何像素都不會是Color.Red。您是否打算針對您的模板進行測試?

此外,你可能想看看this question談論比較顏色。它表明,對於基本顏色比較,在顏色結構上使用.ToArgb()方法,因爲==Equals不僅僅比較顏色值。

+0

我沒有做任何其他更改。你是對的,我想測試一下map_t,但即使評論這個測試也沒有幫助。那麼,如果我想改變'map'然後繪製那些改變後的圖像,我還缺少什麼?評論線'map.SetPixel(...)'而不是前一個沒有幫助,這對我來說是個謎。此外,這段代碼與我已經發現的非常相似,但沒有代碼是我需要的確切的東西,所以我必須改變它 - 以一種錯誤的方式,顯然... – wasyl

+0

我不認爲你的問題正在更新圖片框,你在做什麼應該更新框(見簡單的例子:https://gist.github.com/2563600)。你的'if'聲明阻止你改變圖像。 – heavyd

+0

非常感謝!測試是錯誤的,但實際上導致我的問題是'MapForm.Enabled'設置爲'False'!正因爲如此,MouseMove事件根本不會被調用......你幫我找到了這個應該可以工作的方法 - 它可以(兩種方式,'map.SetPixel'和'canvas.DrawLine'。 我可能將會爲此做一些事情,再次感謝!:) – wasyl