2010-04-16 57 views
1

嘿,我搞亂圖像轉換爲ASCII的。爲此,我加載圖像,在每個像素上使用getPixel(),然後將具有該顏色的字符插入到一個richTextBox中。C#問題與getPixel&設置RTF文本顏色相應

 Bitmap bmBild = new Bitmap(openFileDialog1.FileName.ToString()); // valid image 

     int x = 0, y = 0; 

     for (int i = 0; i <= (bmBild.Width * bmBild.Height - bmBild.Height); i++) 
     { 
      // Ändra text här 
      richTextBox1.Text += "x"; 
      richTextBox1.Select(i, 1); 

      if (bmBild.GetPixel(x, y).IsKnownColor) 
      { 

       richTextBox1.SelectionColor = bmBild.GetPixel(x, y); 
      } 
      else 
      { 
       richTextBox1.SelectionColor = Color.Red; 
      } 


      if (x >= (bmBild.Width -1)) 
      { 
       x = 0; 
       y++; 

       richTextBox1.Text += "\n"; 
      } 

      x++; 
     } 

GetPixel確實會返回正確的顏色,但文本只會以黑色顯示。如果我改變

richTextBox1.SelectionColor = bmBild.GetPixel(x, y); 

這個

richTextBox1.SelectionColor = Color.Red; 

它工作正常。

爲什麼我沒有得到正確的顏色?

(我知道這並不做新線正常,但我想我會得到這個問題的倒數第一。)

感謝

回答

1

您的問題是由使用+ =設置文本值引起的。使用+ =會導致您的格式丟失,方法是重新設置文本值並分配新的字符串值。

您需要更改代碼以使用Append()。

richTextBox1.Append("x"); 
richTextBox1.Append("\n"); 

從MSDN:

您可以使用此方法來控制文本添加到現有的文本,而不是使用連接運算符(+)來連接文本到文本屬性。

1

那麼,這部分可疑,我:

 if (x >= (bmBild.Width -1)) 
     { 
      x = 0; 
      y++; 

      richTextBox1.Text += "\n"; 
     } 

     x++; 

因此,如果x爲> - 寬度-1,則設置x到0,然後將其遞增到1出側的條件。會覺得如果你把它設置爲0


編輯它不會增加: 而且在思考這個更多一些,爲什麼不重複在嵌套循環寬度&高度和簡化事情有點。類似於:

int col = 0; 
int row = 0; 
while (col < bmBild.Height) 
{ 
    row = 0; 
    while (row < bmBild.Width) 
    { 
     // do your stuff in here and keep track of the position in the RTB 
     ++row; 
    } 
    ++col; 
} 

因爲您正在駕駛這個東西脫離圖像的大小,對吧? RTB中的位置取決於您在位圖中的位置。