как конвертировать JPEG в массиве в растровое изображение - PullRequest
4 голосов
/ 02 марта 2011

У меня есть работающее приложение в c # /. Net, которое в настоящее время принимает необработанные данные изображения в формате байера из набора встроенных камер и преобразует их в изображения JPEG. Чтобы сэкономить время передачи, я изменил встроенные устройства для кодирования изображений в формате JPEG перед передачей. Я опытный программист на встраиваемых системах, но в целом с # /. Net noob. Мне удалось изменить приложение, чтобы сохранить массивы в файл с именем jpeg, используя этот фрагмент: (смещение 5 - пропуск данных заголовка в кадре передачи)

FileStream stream = File.Create(fileName);
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(multiBuff.msgData, 5, multiBuff.dataSize - 5);
writer.Close();

Файлы открываются нормально, но теперь я хочу обрабатывать данные как растровое изображение без необходимости сохранять и загружать из файла. Я попробовал следующее в массиве данных:

MemoryStream stream = new MemoryStream(data);
BinaryReader reader = new BinaryReader(stream);
byte[] headerData = reader.ReadBytes(5);
Bitmap bmpImage = new Bitmap(stream);

Но этот параметр выдает исключение допустимого параметра. Как новичок, я немного перегружен всеми классами и методами для изображений, и кажется, что то, что я делаю, должно быть обычным делом, но я не могу найти никаких примеров в обычных местах. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

Я думаю, что вы ищете Bitmap.FromStream():

Bitmap bmpImage = (Bitmap)Bitmap.FromStream(stream);

На самом деле использование new Bitmap(stream) также должно работать - это означает, что данные в потоке не являются действительным изображением - выуверен, что JPG действителен?Можете ли вы сохранить его на диск и открыть его, например, в Paint для проверки?

1 голос
/ 02 марта 2011

Вы используете класс Image.

Image image;
using (MemoryStream stream = new MemoryStream(data))
{
    image = Image.FromStream(stream);
}
0 голосов
/ 02 марта 2011

Кстати, это не сработало, потому что reader.ReadBytes (5) возвращает 5 первых байтов потока, а не байты после позиции 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...