1

ねえ、私は画像を A​​SCII 画像に変換することをいじっています。このために、画像をロードし、各ピクセルで getPixel() を使用してから、その色の文字を richTextBox に挿入します。

        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;

それは正常に動作します。

正しい色が得られないのはなぜですか?

(改行が適切に行われないことはわかっていますが、最初にこの問題の根底に到達すると思いました。)

ありがとう

4

2 に答える 2

1

+= を使用して Text 値を設定すると、問題が発生します。+= を使用すると、テキスト値を再設定して新しい文字列値を割り当てることにより、書式設定が失われます。

代わりに Append() を使用するようにコードを変更する必要があります。

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

MSDN から:

このメソッドを使用すると、連結演算子 (+) を使用してテキストを Text プロパティに連結する代わりに、コントロール内の既存のテキストにテキストを追加できます。

于 2010-04-19T18:04:53.293 に答える
1

さて、このセクションは私には疑わしいように見えます:

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

            richTextBox1.Text += "\n";
        }

       x++; 

したがって、x が >- width-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 での位置は、ビットマップでの位置によって異なります。

于 2010-04-16T17:49:33.510 に答える