2014-01-26 2 views
0

У меня есть файл (c: \ kk.bmp). Я хочу, чтобы прочитать этот файл в двухмерном массиве [ширина, высота] из байта и двухмерного массива [ширина, высота] из Int32, таких какКак прочитать файл в двухмерном массиве в C#

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

Я хочу, чтобы прочитать файл «filename_mpeg4» в два измерения в массиве байтов и массиве Int32 в C#.

+1

Каждый массив может быть доступен как двухмерный ... http://stackoverflow.com/questions/1817631/iterating-one-dimension-array-as-two-dimension-array –

ответ

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

+0

LOL Вы действительно не ответили на его вопрос но это то, что ему нужно! Мое почтение к чтению между строками, сэр :) – pid

Смежные вопросы