c# Read/Write 像素颜色不起作用

c# Read/Write pixel colors not working

我正在尝试创建一个简单的图像格式,它将每个像素的 argb 颜色写入一个文件,我使用这段代码来获取和设置所有

List<Color> pixels = new List<Color>();
Bitmap img = new Bitmap("*imagePath*");

for (int i = 0; i < img.Width; i++)
{
for (int j = 0; j < img.Height; j++)
{
    Color pixel = img.GetPixel(i,j);
    pixels.Add(pixel);
}
} 

来自:

How can I read image pixels' values as RGB into 2d array?

然后我将每个像素写在一个新行上:

foreach(Color p in pixels)
{
    streamWriter.WriteLine(p.ToArgb)
}
streamWriter.Close();

然后如果我尝试阅读它:

        OpenFileDialog op = new OpenFileDialog();
        op.ShowDialog();
        StreamReader sr = new StreamReader(op.FileName);
        int x = 1920;
        int y = 1080;
        Bitmap img = new Bitmap(x,y);
        for (int i = 0; i < img.Width; i++)
        {
            string rl = sr.ReadLine();
            for (int j = 0; j < img.Height; j++)
            {
                img.SetPixel(i, j, Color.FromArgb(Int32.Parse(rl)));
            }
        }
        pictureBox1.Image = img;

但是从这个 bmp 文件中,

我得到这个输出:

有人知道如何解决这个问题吗?

提前致谢。

当您写入像素时,您是在单独一行中写入每个像素。但是,在阅读时,您每列读一行,然后为该列的每一行使用相同的颜色值。

而是在最内层循环中调用 ReadLine

for (int i = 0; i < img.Width; i++)
{           
    for (int j = 0; j < img.Height; j++)
    {
        string rl = sr.ReadLine();
        img.SetPixel(i, j, Color.FromArgb(Int32.Parse(rl)));
    }
}

不用说,这种图像格式在 space 方面效率低得令人难以置信,而且在当前的实现中,读写性能也是如此。明智的做法是仅将其用作学习练习。