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 方面效率低得令人难以置信,而且在当前的实现中,读写性能也是如此。明智的做法是仅将其用作学习练习。
我正在尝试创建一个简单的图像格式,它将每个像素的 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 方面效率低得令人难以置信,而且在当前的实现中,读写性能也是如此。明智的做法是仅将其用作学习练习。