【问题标题】:How To Read File Into A Two Dimensional Array in c#如何在c#中将文件读入二维数组
【发布时间】:2014-01-26 15:17:00
【问题描述】:

我有一个文件 (c:\kk.bmp)。我想把这个文件读入一个二维数组[Width,Height] byte和一个Int32的二维数组[Width,Height],如

byte[,] byte_array = File.ReadAllBytes(filename_mpeg4); // Not correct

我想在 C# 中将文件“filename_mpeg4”读取为字节数组和 Int32 数组中的二维。

【问题讨论】:

标签: c# .net arrays byte int32


【解决方案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

【讨论】:

  • 哈哈,你并没有真正回答他的问题,但这正是他所需要的!先生,我对字里行间的阅读表示敬意:)
【解决方案2】:

你不能用当前的文件结构做到这一点:你需要指定至少一维的长度。比如:

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++];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2015-05-16
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多