如何手动读取PNG图像文件并操纵C#中的像素?

时间:2016-03-04 23:45:08

标签: .net image bitmap png c#-2.0

.NET提供了许多类和函数来操作包括PNG在内的图像。像Image, Bitmap, etc. classes一样。假设,我不想使用这些类。

如果我想手动读取/写入PNG图像作为二进制文件以处理像素,那我该怎么办呢?

private void Form1_Load(object sender, EventArgs e)
{
    { 
        this.BackColor = System.Drawing.Color.LightCyan;
        button1.Hide();
        if (comboBox1 = 1);
        button1.Show();
    }
}

如何掌握单个像素来操纵它们?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用ReadAllBytesWriteAllBytes功能:

byte[] imageBytes = File.ReadAllBytes("D:\\yourImagePath.jpg");    // Read
File.WriteAllBytes("D:\\yourImagePath.jpg", imageBytes);           // Write

答案 1 :(得分:0)

将Image转换为byte []数组:

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}

将byte []数组转换为Image:

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}

如果你想在这里使用像素,那么:

 Bitmap bmp = (Bitmap)Image.FromFile(filename);
                Bitmap newBitmap = new Bitmap(bmp.Width, bmp.Height);

                for (int i = 0; i < bmp.Width; i++)
                {
                    for (int j = 0; j < bmp.Height; j++)
                    {
                        var pixel = bmp.GetPixel(i, j);

                        newBitmap.SetPixel(i, j, Color.Red);
                    }
                }