c#读/写像素颜色不起作用

时间:2016-03-13 17:11:12

标签: c# bitmap pixels

我正在尝试创建一个简单的图像格式,它为每个像素写入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文件,

我得到这个输出:

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

提前感谢。

1 个答案:

答案 0 :(得分:3)

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

而是在最里面的循环中调用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)));
    }
}

无需添加,这种图像格式在空间方面效率非常低,而且它的当前实现也具有读写性能。你最好只将它用作学习练习。