将 Png 转换为 Bmp 和位图数组

Posted

技术标签:

【中文标题】将 Png 转换为 Bmp 和位图数组【英文标题】:Converting Png to Bmp and bitmap array 【发布时间】:2015-08-11 08:19:13 【问题描述】:

我在 SO 中搜索我的问题解决方案,但我没有找到(也许这不是问题,它工作正常,只是我要转储来获取它)

我有 BMP 文件,我尝试将其转换为位图数组。一切都很好,但我得到一个看起来很奇怪的输出文件。该文件是 16x32,所以我应该得到 512 位。最终图像是黑白的,所以我应该有 512 x 3(3 个颜色位)像素 - 1536 像素,值为 0 或 255,但得到 1590 像素。这 54 个像素的值与 0 或 255 不同,为什么?那个值是什么,什么 bmp 文件使用它? 代码:`

        long time = 0;
        Stopwatch watch = new Stopwatch();
        watch.Start();
        Image img = Image.FromFile("test.png");
        byte[] data;
        MemoryStream ms = new MemoryStream();
        img.Save(ms, ImageFormat.Bmp);
        data = ms.ToArray();
        watch.Stop();
        time = watch.ElapsedTicks;
        Console.WriteLine(time);
        FileStream file = new FileStream("test.txt", FileMode.Create, FileAccess.ReadWrite);
        StreamWriter writer = new StreamWriter(file);


        foreach (byte b in data)
        
            writer.WriteLine(b); 
        
        writer.Close();
        file.Close();
        Console.ReadKey();`

我知道代码不好读,但仅用于一些测试

【问题讨论】:

If 可能是 BMP 文件的 FileHeader。它是否以“BM”开头?看示例 1! 所以看起来如果我只需要在我的代码中使用图片我可以忽略它? 是的,只要您知道它有正确的偏移量。偏移量的长度会因某些 bmp 格式而异。 是的,所以忽略它:) 感谢您的帮助 【参考方案1】:

我会说它是文件头,就像 TaW 已经指出的那样。根据该网站http://www.fastgraph.com/help/bmp_header_format.html,BMP 标头大小为 54 字节。如果您查看偏移量 18 和 22,您应该会看到图片的宽度和高度 (16, 32)。

【讨论】:

以上是关于将 Png 转换为 Bmp 和位图数组的主要内容,如果未能解决你的问题,请参考以下文章

将Java位图转换为字节数组

iOS:将 png 图像转换为 1 位 bmp 图像

需要帮助将 BMP 图像转换为 [R] 中的矩阵吗?

如何将 .png 文件转换为 .bmp?

将 BMP 实例转换为 png

将多个 png 转换为 bmp 从标准输入到标准输出