我有一个文件 (c:\kk.bmp)。我想把这个文件读入一个字节的二维数组[Width,Height]和一个Int32的二维数组[Width,Height],比如
byte[,] byte_array = File.ReadAllBytes(filename_mpeg4); // Not correct
我想在 C# 中将文件“filename_mpeg4”读入字节数组和 Int32 数组中的二维。
BMS 和 MPEG4 是完全不同的东西。位图有两个维度。Mpeg4 或其他视频文件使用复杂的压缩算法存储二维帧列表。因此,您有两个空间加一个时间维度。您的数组必须是三维的。从您的问题中不清楚您是在尝试读取图像(c:\kk.bmp)还是视频(filename_mpeg4)。
在这两种情况下,您都需要解码文件。不要自己尝试这样做,这非常复杂(尤其是对于视频)。
读取位图很容易:
Bitmap myBitmap = new Bitmap(@"C:\kk.bmp");
这也适用于 JPG、GIF、TIF 和 PNG。解码器集成在 Windows 操作系统中。
您可以在图像上绘制并执行其他操作,而无需将其转换为某个数组。
// Example: Drawing a line on a bitmap
using (Graphics g = Graphics.FromImage( myBitmap )) {
g.DrawLine(Pens.Red, new Point(0, 0), new Point(100, 50));
}
如果您仍然需要将像素数据提取到数组中,这个 SO 答案可能会对您有所帮助:C#Getting the pixel data effective from System.Drawing.Bitmap
视频是一个完全不同的故事。你的问题没有简单的答案。这个 CodeProject 可能会帮助你: http: //www.codeproject.com/Articles/9676/Extracting-still-pictures-from-movie-files-with-C。
您不能使用当前文件结构执行此操作:您需要指定至少一维的长度。就像是:
int height = File.Read();
byte[] mp4 = File.ReadAllBytes(filename_mpeg4);
int width = mp4.length/height;
byte[,] byte_array = new byte[height,mp4.length/height];
int k = 0;
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
byte_array[i,j] = mp4[k++];
}
}