我正在尝试创建一个简单的图像格式,它为每个像素写入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文件,
我得到这个输出:
有人知道如何解决这个问题吗?
提前感谢。
答案 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)));
}
}
无需添加,这种图像格式在空间方面效率非常低,而且它的当前实现也具有读写性能。你最好只将它用作学习练习。