Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2016, 08:16   #1
ixilimuse
Пользователь
 
Аватар для ixilimuse
 
Регистрация: 20.04.2011
Сообщений: 12
По умолчанию Получаю картинку в виде массива данных. Но не могу её преобразовать в картинку. Что я делаю не так?

Всем доброго времени суток, коллеги!
С C# только начинаю знакомиться, перебрал кучу вариантов, но
не понимаю что я делаю не так. Буду рад любому совету.

Суть - предоставили мне ВэбСервис для приёма\отправки сообщений на ВатсАпп.
Текст принимаю отправляю. Картинки - получаю пакет, вижу картинку в виде
массива данных, и не могу преобразовать её к формату картинки.

Стал экспериментировать.
Код:
     static void TestStream()
        {
			//Загружаю картинку из файла. 
            Image ImageFromFile = Image.FromFile(@"P:\РабочиеФайлы\ФайлыОбразцыТЗиТП\CRM_WhatsUp_Viber_EMail\Кораблик.jpg");
            //Привожу к Bitmap
			Bitmap bmp = new Bitmap(ImageFromFile);
            
			//Bitmap конвертирую в массив байтов
            ImageConverter converter = new ImageConverter();
            byte[] ImageInArray = (byte[]) converter.ConvertTo(bmp, typeof(byte[]));

			//Теперь полученный массив привожу к MemoryStream
            MemoryStream ms = new MemoryStream(ImageInArray);
			//Из Стрима снова получаю картинку и без проблем сохраняю её на диск рядом с оригиналом.
			//Сохранение работает гладко. Сохраненное изображение открывается, все супер.
            Image returnImage = Image.FromStream(ms);
            returnImage.Save(@"P:\РабочиеФайлы\ФайлыОбразцыТЗиТП\CRM_WhatsUp_Viber_EMail\Кораблик_FromByteArray.jpg");
 
        }
В данном тестовом примере - все работает чётко.

Далее. Пытаюсь сделать по аналогии при получении сообщения от вэбсервиса.

Код:
		...
          foreach (whatsAppImageMessage CurrentMessage in messages)
            {
					//Создаю массив байтов. Даже размер изначально задаю. Размер верный. 
                    byte[] XPicture = new byte[CurrentMessage.size];
					//Помещаю в массив данные.
                    XPicture = CurrentMessage.imageContent.ToArray();
					
					//Далее действую аналогично как в тестовом примере...
                    MemoryStream ms = new MemoryStream(XPicture); 
                    Image ComingImage = Image.FromStream(ms); //И вот тут ошибка: 
                                               // "Image.FromStream(ms)" запустило исключение типа "System.ArgumentException" System.Drawing.Image {System.ArgumentException} 
            }
		...
В общем я понимаю одно. Дело судя по всему в типе данных. Возможно массив приходит в
каком-то не стандартном виде. Возможно его предварительно необходимо преобразовать к
определенному виду? Но как и к какому?
Или что тут ещё можно придумать?
В сообщении по мимо самого массива я вижу только:
Размер массива;
mimeType: (image/jpeg);
fileName.

Буду рад любюому совету, любому направлению куда копать)) Заранее благодарю))

Последний раз редактировалось Alex11223; 12.04.2016 в 08:24.
ixilimuse вне форума Ответить с цитированием
Старый 12.04.2016, 08:57   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Наверно об этом лучше спрашивать у автора веб-сервиса.
Или хотя бы показать что там за байты.

И советую придерживаться одного стиля кода (желательно того, который используется в большинстве C# кода — https://msdn.microsoft.com/en-us/library/ff926074.aspx, https://msdn.microsoft.com/en-us/library/ms229042.aspx), а не смешивать пробелы с табами и lowerCase имена переменных с UpperCase.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.04.2016, 11:05   #3
ixilimuse
Пользователь
 
Аватар для ixilimuse
 
Регистрация: 20.04.2011
Сообщений: 12
По умолчанию

Большое спасибо за ответ, Alex11223.

Касаемо стиля, просто перед помещением в сообщение редактировал в notepad++, лишние комментарии вырезал и как следствие нарушил табуляцию и т.п.
По поводу lowerCase/UpperCase согласен. Нужен один стиль.

По задаче.
Подходил к разработчику сервиса. Он сказал что этот набор байт и есть картинка и ничего с ним делать не нужно. Нужно просто сохранить на диск с нужным расширением и все.
Пробовал сохранить через FileStream, не помогло.
Похоже нельзя так просто взять и сохранить массив байт в файл :D

Так же узнал что сервис реализован на Java. Больше информации нет.. Буду продолжать экспериментировать))
ixilimuse вне форума Ответить с цитированием
Старый 12.04.2016, 11:08   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Сохранять в файл можно и без FileStream с помощью File.WriteAllBytes.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.04.2016, 16:00   #5
ixilimuse
Пользователь
 
Аватар для ixilimuse
 
Регистрация: 20.04.2011
Сообщений: 12
По умолчанию

Благодарю, Alex11223, за конструктивный совет.
За последние сутки не плохо подтянул знания по ДотНету

Было подозрение что получаемый пакет приходит в формате Base64. Весьма подробно изучил этот момент.
Поэкспериментировал с преобразованиями.

Затем опытным путем выяснил что размер получаемого массива байтов почти в половину меньше оригинальной картинки которую я отправляю с телефона. При этом выбрал картинку которую мне ранее присылали на ВотсАпп что бы исключить ужим качества при пересылке.

В общем отправил подробный отчет по дебагу разработчику сервиса. Ибо все признаки намекают на то, что изначально получаемый массив, либо не полный, либо деформирован.

Ещё раз благодарю за помощь. Думаю что после удачной пересылки ещё отпишусь о решении)
ixilimuse вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос из буфера обмена сохраняет картинку в папку, а саму картинку показывает в ексель mergin07 Microsoft Office Excel 10 23.04.2014 07:55
поиск по большому массиву данных или что я делаю не так Folly SQL, базы данных 5 01.02.2014 20:03
Преобразовать в картинку Dezmont_ Microsoft Office Word 4 19.10.2012 09:01
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42
IBExpert, не могу понять что делаю не так! в чём проблема.... katia0017 SQL, базы данных 10 15.01.2010 18:33