2016-07-11 4 views
0

Я работаю над проектом, где мне нужно обработать изображение, которое я получаю из сокета, и отображать его.C# Как изображение хранится в MemoryStream

Я получаю изображение в формате jpeg, и я не могу использовать метод Image.FromStream()); для извлечения изображения, потому что он содержит больше данных, и я хочу обработать его, пока я читаю данные по соображениям эффективности. (В основном, я хочу, чтобы прочитать изображение из потока вручную). Есть ли источник, который объясняет, как эти изображения хранятся в MemoryStream?

MemoryStream построен на байте [] buffer, я также использую тот же буфер, и я не создаю новый MemoryStream каждый раз при вызове метода. Образец кода:

private byte[] BlockToJpeg() 
    {  
     Bitmap block=new Bitmap("..."); 
     MemoryStream ms=new MemoryStream(); 
     block.Save(ms, ImageFormat.Jpeg); 
     return ms.GetBuffer(); 
    } 

Поэтому вызов будет выглядеть следующим образом

byte[] buffer=BlockToJpeg(); 
    sck.Send(buffer);//sending the buffer...not the full code because this is not our problem. 

В настоящее время в стороне Reciver, когда я получу этот буфер:

Byte[] RecieveBuffer=sck.Recieve();//again,kind of pseudo code,because this is not the relevant part. 

я должен обрабатывать пиксели, поэтому я предпочитаю читать их с byte[] array по одному вручную ... Есть ли какие-либо структура для чтения этого (в нашем случае - чтение jpeg-изображения, сохраненного как массив байтов)? Например, первые 4 байта являются шириной, вторая - высотой ... 3rd - PixelFormat, а остальные - значениями пикселей ... или somthing ...?

Спасибо.

+0

Изображения не сохраняются в MemoryStreams, если вы их не поместили. Вам нужно спросить, кто заполняет MemoryStream, как они выбрали компоновку данных. Сами данные - это просто представление файла, оно выложено точно так же, как оно выложено, когда у вас есть файл на жестком диске. –

+0

@ScottChamberlain alright..i добавил короткий пример кода в вопросе, чтобы сделать проще понять .. – Slashy

+0

В вашем обновлении BlockToJpeg не имеет большого смысла, что вы пытаетесь сделать там? Просто попытаться выяснить размер файла, если вы преобразовали png в jpeg? (Также вы должны избавиться от всех созданных вами объектов «Bitmap» или «Image») –

ответ

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