c# - 如何将组成文件的原始位显示为位图图像?
问题描述
我想通过将文件转换为字节数组并从字节构造位图来将文件(例如 MIDI 文件)显示为位图。
解决方案
可以执行以下操作:
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
推荐阅读
- datetime - 将今天的日期插入电子表格的脚本是错误的
- javascript - 为什么在 Angular ControlValueAccessor 实现中使用函数表达式?
- python - 为什么“scipy.optimize.minimize”让我很不合适?
- javascript - 防止在javascript中修改对象和数组
- mysql - 使用内部选择连接来自 3 个表的数据
- javascript - 在summernote中嵌入社交媒体链接
- c# - Monitor.Pulse() 有条件
- javascript - OpenLayers 中多边形的自己的 removeLastPoint() 函数
- java - 是否可以从 Dropbox 文件的元数据中仅检索标签。?
- excel - 将数组集成到excel VBA中的子例程中