翻转位图但保持原始文件大小

Flipping a bitmap but keeping original file size

我有一些东西在修改 BMP 文件后需要相同的文件大小,但是当我尝试翻转它时,生成的文件的文件大小发生了变化。

Bitmap pic = new Bitmap(input);
pic.RotateFlip(RotateFlipType.Rotate180FlipX);
pic.Save("test.bmp", ImageFormat.Bmp);

有什么建议吗?

问题是,原来是16bpp,输出是32bpp。位图会自动转换为 32bpp,因此您只需将其转换回来(或使用某些库,它不会在读取文件时自动执行此转换):

    Bitmap pic = new Bitmap("example.bmp");

    Bitmap pic2 = new Bitmap(pic.Width, pic.Height, PixelFormat.Format16bppRgb555);

    for (int x = 0; x < pic.Width; ++x)
    {
        for (int y = 0; y < pic.Height; ++y)
        {
            pic2.SetPixel(x, y, pic.GetPixel(x, y));
        }
    }

    pic2.RotateFlip(RotateFlipType.Rotate180FlipX);
    pic2.Save("test.bmp", ImageFormat.Bmp);

说明发生了什么的最好方法是使用十六进制查看器查看文件,bmp 格式有据可查:https://en.wikipedia.org/wiki/BMP_file_format