2013-01-18 7 views
2

Я в основном разрабатываю программное обеспечение в Visual Studio 2010 .NET 4.0, где я снимаю скриншот с ПК и отправляю его по сети другому , Поскольку я не могу напрямую отправить растровое изображение, я должен преобразовать его в String. Я сделал много интернет-поиска, но не смог найти какое-либо решение. :(Преобразование изображения растрового изображения в формат String для передачи по сети (LAN) и наоборот

Я нашел этот код на StackOverflow себя. Но это не работает. Я попытался напечатать строку (преобразованное из изображения), но программа ведет себя как та линия оленья кожа существовать. я использовал MessageBox.Show (String); Но даже не окно сообщ всплывает Может кто-нибудь, пожалуйста, помогите я застрял Thankx заранее :) (Y)

bitmapString = null;  // Conversion from image to string 
MemoryStream memoryStream = new MemoryStream(); 
bmpScreenshot.Save(memoryStream, ImageFormat.Png); 
byte[] bitmapBytes = memoryStream.GetBuffer(); 
bitmapString = Convert.ToBase64String(bitmapBytes,Base64FormattingOptions.InsertLineBreaks); // Conversion from image to string end 

Image img = null;       //Conversion from string to image 
byte[] bitmapBytes = Convert.FromBase64String(rob); 
MemoryStream memoryStream = new MemoryStream(bitmapBytes); 
img = Image.FromStream(memoryStream); //Conversion from string to image end 
+0

Зачем это строка, а не только буфер байта ? –

+2

Вы можете отправить его с помощью текстовой кодировки, но почему бы не отправить изображение в виде двоичного потока? – gustavodidomenico

+0

В любом месте в реализации этого кода вы даете ему путь к изображению, которое хотите преобразовать? – cost

ответ

4

Try, чтобы преобразовать его в массив байтов:

!?!
public static byte[] ImageToByteArray(Image img) 
{ 
    byte[] byteArray = new byte[0]; 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
     stream.Close(); 

     byteArray = stream.ToArray(); 
    } 
    return byteArray; 
} 

Я считаю, что вы можете просто поместить объект Bitmap в объект Image. Итак, Image img = (Image)myBitmap; - затем передайте это в метод выше.

0

Для чего нужна строка? Какой метод вы используете для отправки по сети? Веб-сервис? Прямые розетки?

Независимо от того, как вы отправляете его, хотя, лучше всего было бы, чтобы преобразовать его в массив байтов, а затем передать этот массив по сети

Если вам нужен какой-то код, как это сделать, проверка аналогичные вопросы по SO, например Sending and receiving an image over sockets with C#

0

Вы можете напрямую отправлять отдельные байты, но если вы действительно хотите строку, вы можете закодировать ее в формате с именем base64. Вот документация msdn для encoding to и decoding from в этом формате. Вы можете преобразовать изображение в массив байтов, используя код @AdamPlocher, опубликованный в его ответе (который I + 1 сделал, поскольку он спас меня от этого;))