我有一个文件(c:\ kk.bmp)。我想把这个文件读成二维数组[Width,Height] 字节和Int32的二维数组[宽度,高度],例如
byte[,] byte_array = File.ReadAllBytes(filename_mpeg4); // Not correct
我希望将文件“filename_mpeg4”读入C#中Int32的字节数组和数组的二维中。
答案 0 :(得分:1)
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 efficiently from System.Drawing.Bitmap
视频是一个完全不同的故事。你的问题没有简单的答案。此CodeProject可能会帮助您:http://www.codeproject.com/Articles/9676/Extracting-still-pictures-from-movie-files-with-C。
答案 1 :(得分:0)
您无法对当前文件结构执行此操作:您需要指定至少一个维度的长度。类似的东西:
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++];
}
}