如何将组成文件的原始位显示为位图图像? [关闭]

Posted

技术标签:

【中文标题】如何将组成文件的原始位显示为位图图像? [关闭]【英文标题】:How to display the raw bits composing a file as a bitmap image? [closed] 【发布时间】:2019-04-26 08:18:41 【问题描述】:

我想通过将文件转换为字节数组并从字节构造位图来将文件(例如 MIDI 文件)显示为位图。

【问题讨论】:

将音频文件转换为图像?我完全不清楚你想要实现什么。但无论如何,您应该提供您已经尝试过的东西,而不仅仅是指望我们做您的工作,即思考、尝试、再思考 是的,这只是字节,没有理由不能将几乎任何文件转换为图像。 我写了这个答案,因为当这个问题结束时有人建议我这样做:***.com/questions/55860580/… 好吧,引用 cmets 对上述问题的看法:“以尽可能集中的方式编写您的问题,以降低上述众多低质量答案的可能性”。你的问题和封闭的一样不清楚。 “如何实现这一点”的正确问题通常包括“这是我当前的代码,但由于以下原因它未能达到我的期望......”。见***.com/help/how-to-ask 【参考方案1】:

可以执行以下操作:

        public void Convert()
        
            string filePath = "C:\\Users\\User\\Desktop\\sample.mid";
            byte[] bytes = File.ReadAllBytes(filePath);
            int pixelCount = (int)Math.Ceiling(bytes.Count() / 4.0);
            double width = Math.Ceiling(Math.Sqrt(pixelCount));
            double height = Math.Ceiling(pixelCount / width);
            string outputPath = "C:\\Users\\User\\Desktop\\sample.bmp";
            SaveAsBmp((int)width, (int)height, bytes, outputPath);
        

        public void SaveAsBmp(int width, int height, byte[] argbData, string path)
        
            using (Bitmap img = new Bitmap(width, height, PixelFormat.Format32bppPArgb))
            
                BitmapData data = img.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, img.PixelFormat);
                for (int y = 0; y < height; y++)
                
                    Marshal.Copy(argbData, width * y, data.Scan0 + data.Stride * y, width * 4);
                
                img.UnlockBits(data);
                img.Save(path, ImageFormat.Bmp);
            
        

以下内容来自此处提供的示例 MIDI:https://en.wikipedia.org/wiki/File:MIDI_sample.mid?qsrc=3044

【讨论】:

这与midi文件无关。它将与任何二进制文件一起“工作”。所以这个问题的标题似乎很有误导性。我原以为你想显示音符,但原始字节与音乐的关系比与图像的 jpg 的原始字节无关。 是的,我看不出答案是怎么错的? 我冒昧地编辑了问题中的 MIDI 参考。现在问题和答案都是一致的并且是有意义的。 (有点..;-) - 如果您对它的解决方案感到满意,请随时接受您的答案。如果您想要不同的东西,请随时解释..! 感谢您抽出宝贵时间帮助改进问题和答案 很遗憾,您至少在 2 天内无法接受自己的答案

以上是关于如何将组成文件的原始位显示为位图图像? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MFC 将 24 位彩色图像转换为二进制图像?

如何在 16 位显示器上缩小原始 rgb 数据数组

用c语言读取24位位图bmp文件

如何将图像,Pdf,Docx和Doc文件转换为位图[关闭]

如何使用 OpenCV C++ 将 24 位深度的 PNG 图像转换为 8 位深度的 PNG 图像

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