我有一个简单的文件,它读取单色位图(即黑色和白色)并打印出x代表黑色部分。但是,我注意到由于某种原因我需要添加代码
img.RotateFlip(RotateFlipType.Rotate270FlipY);
让它“正常”出现。换句话说,似乎我的代码或内置函数的实现中的某些东西在读入时旋转和翻转图像,与我的意图相反。
我打赌这是一个愚蠢的错误而不是“按预期工作”,所以我在下面列出了相关代码:
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
// Stream objects for capturing image data
StreamReader sr = new StreamReader(openFileDialog1.OpenFile());
MemoryStream memStream = new MemoryStream();
// Image objects containing image data
Bitmap img = (Bitmap) Bitmap.FromStream(sr.BaseStream);
/**** HACK ****/
//img.RotateFlip(RotateFlipType.Rotate270FlipY);
/**** ****/
// Save the image data to our memory stream
img.Save(memStream, ImageFormat.Gif);
// Save data to a byte array
byte[] imgData = memStream.ToArray();
// Print image data
for (int x = 0; x < img.Width; ++x)
{
Color rgb = new Color();
for (int y = 0; y < img.Height; ++y)
{
rgb = img.GetPixel(x, y);
if (rgb.ToArgb().Equals(Color.White.ToArgb()))
{
textBox1.AppendText(" ");
}
else
{
textBox1.AppendText("x");
}
}
textBox1.AppendText(Environment.NewLine);
}
}
}
我读了一个字母'B'的位图,它给了我以下内容。
没有“黑客”:
x x
x x
x x
xx xx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
x x x
x x x
x x x
x x x
x x x
x x x
x x x
x x x
x x
x xx
x xxxx x
xx xxx x x
xx xxxx xx xx
xxxxxxxxxx xxx xxx
xxxxxxx xxxxxxxxxx
xxx xxxxxxx
xxx
随着“黑客”:
xxxxxxxxxxxxxxx
xxxx xxx
xxx xxx
xxx xx
xxx xx
xxx xx
xxx xxx
xxx xxx
xxx xxx
xxx xxx
xxx xxxx
xxx xxxx
xxx xxxx
xxxxxxxxxxxxxx
xxx xxx
xxx xxx
xxx xxx
xxx xxx
xxx xxx
xxx xxx
xxx xxx
xxx xx
xxx xxx
xxx xx
xxx xxx
xxxx xxx
xxxxxxxxxxxxxxxx
我非常期待把错误指向我。 :)
提前致谢!
答案 0 :(得分:4)
你的问题是你正在用你的内部循环构建行放入文本框,但你的内部循环遍历y。尝试更改这些循环的嵌套,看看你得到了什么。此外,您的y循环需要从顶部开始,否则图像将颠倒。
for (int y = img.Height - 1; y >= 0; --y)
{
Color rgb = new Color();
for (int x = 0; x < img.Width; ++x)
{
rgb = img.GetPixel(x, y);
if (rgb.ToArgb().Equals(Color.White.ToArgb()))
{
textBox1.AppendText(" ");
}
else
{
textBox1.AppendText("x");
}
}
textBox1.AppendText(Environment.NewLine);
}
答案 1 :(得分:2)
你正在侧面打印它。你的y
循环应该是外循环,这样你就可以一次写一行。
答案 2 :(得分:1)
你的宽度和高度向后循环。你最里面的循环是从图像的顶部到图像的底部。
答案 3 :(得分:1)
看起来我内圈正在扫描渐进的Y值,外观使用不同的X值。假设输入数据处于“正常”扫描顺序,这将导致您看到的旋转。 - 卡尔