Как читать байты из данных файла (передающий заголовок)
Я хочу передать раздел заголовка и получить байты только содержимого файла. Например, я хочу читать только RGB-байты из bmp-файла или jpg-файла; или я хочу читать только текстовое содержимое из txt-файла. Как я могу получить байты контента.
Файл.ReadAllBytes("C:\\a.jpg")
Это метод чтения с заголовками. Мне не нужен раздел заголовков.
Спасибо
Что я уже пробовал:
Способ Марсал. Но это было трудно.
F-ES Sitecore
Каждый формат файла отличается, вам просто нужно знать, сколько байтов находится в заголовке каждого формата файла, который вы поддерживаете, и пропустить их.
gacar
Если так, то очень плохо. Знаете ли вы, как я могу получить список файловых структур. А список есть?
Eric Lynch
В случае файлов ".jpg": https://en.wikipedia.org/wiki/JPEG
F-ES Sitecore
Вы можете найти структуры популярных форматов, погуглив их.
Richard MacCutchan
В дополнение к другим комментариям, даже если вы пропустите заголовки, вам все равно нужно понять структуру оставшихся байтов.
Eric Lynch
В качестве предложения, вы открыты для другого подхода? Можно и впустить .NET делает большую часть тяжелой работы для вас, декодируя формат файла, и все еще имеет доступ к значениям RGB для пикселей, составляющих изображение. Или вы настроены на чтение изображения байт за байтом из файла?
gacar
Он может быть доступен для файлов изображений с классом Marshal в .Net
Eric Lynch
Не обязательно нужен Маршал. Следующее немного медленно, но работает.
int x = 0;
int y = 0;
var bitmap = изображение.FromFile(@"pic.jpg") как растровое изображение;
Color color = растровое изображение.GetPixel(x, y);
байт красный = color.R;
байт зеленый = цвет.G;
байт синий = цвет.B;
Немного быстрее (что действительно требует Маршала) описано здесь:
https://stackoverflow.com/questions/7373703/c-sharp-getting-the-pixel-data-efficiently-from-system-drawing-bitmap
WPF также имеет некоторые эквиваленты System.Рисунок, который может быть лучше.