2015-10-20 14 views
1

我想弄清楚哪個顏色的像素,我以前畫紅色。GDI:找出哪個顏色的像素,我畫了

所以當我讀到它不可能直接做到這一點,將我的圖形對象轉換爲一個位圖,它具有函數GetPIxel和相同的寬度/高度作爲我的圖形對象。否則,我認爲它不會起作用。

但是它總是返回我:顏色[A = 0,R = 0,G = 0,B = 0]

我的猜測意味着白色。

這裏是我的代碼:

namespace GDi 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      this.components = new System.ComponentModel.Container(); 
      this.Size = new System.Drawing.Size(400, 400); 
      this.Text = "Display At Startup"; 
      this.BackColor = Color.White; 
     } 


     private void Form1_Load(object sender, EventArgs e) 
     { 
      Graphics dc = this.CreateGraphics(); 
      this.Show(); 
      Pen BluePen = new Pen(Color.Blue, 3); 
      dc.DrawRectangle(BluePen, 0, 0, 50, 50); 
      Pen RedPen = new Pen(Color.Red, 2); 

      dc.DrawEllipse(RedPen, 20, 70, 80, 0); 
      dc.DrawEllipse(RedPen, 2, 88, 300, 0); 
      Bitmap myBitmap = new Bitmap(400, 400, dc); 
      string test = myBitmap.GetPixel(2, 88).ToString(); 
      MessageBox.Show(test); 
     } 
    } 
} 

任何想法,爲什麼它doesent作品?

+0

'DrawEllipse'方法取出限定橢圓的矩形的左上角和右下角點。你正在看那些不在橢圓上的角落。你試過(50,50),應該是藍色的? – juharr

+0

從MSDN開始,關於'Bitmap(int,int,Graphics)':* *用指定大小和**指定Graphics對象的分辨率**初始化Bitmap類的新實例。「*它只使用DpiX和圖形對象的DpiY,它不復製圖像。 –

+0

把'this.CreateGraphics();'改成'Graphics.FromImage(myBitmap);'你試圖在控制圖像的時候(而不是位圖)從位圖中獲取像素。 – Fabjan

回答

1

它不起作用,因爲位圖構造函數只是簡單地創建一個新的空位圖,而與之前的圖形沒有任何關係。

你或許應該使用不同的方法:

  1. 創建一個像你這樣做
  2. 創建一個圖形對象在該位圖繪製使用Graphics.FromImage方法
  3. 繪製到這個新的圖形Bitmap對象
  4. 需要時,從位圖中讀取所需的像素顏色
  5. 當繪圖完成時,將位圖複製到表格
  6. 配置新的圖形和位圖對象。或者,您可能長時間保存位圖,但最好在每次重繪時創建圖形。