2010-04-16 12 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 = Color.Red; 

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

을 변경하는 경우 그것은 잘 작동합니다.

왜 내가 올바른 색상을 얻지 못합니까?

(나는 그것이 제대로의 새로운 라인을하지 않습니다 알지만, 내가 처음이 문제의 바닥에 얻을 것이라고 생각했다.)

감사

답변

1

+ =를 사용하여 텍스트 값을 설정하면 문제가 발생합니다. + =를 사용하면 텍스트 값을 다시 설정하고 새 문자열 값을 할당하여 서식을 잃게됩니다.

대신 Append()를 사용하도록 코드를 변경해야합니다. MSDN에서

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

: 당신은 텍스트 속성에 텍스트를 연결하는 연결 연산자 (+)를 사용하는 대신 컨트롤의 기존 텍스트에 텍스트를 추가하려면이 방법을 사용할 수 있습니다

.

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의 위치는 사용자가 비트 맵에있는 위치에 따라 다릅니다.