s yu Ответов: 1

Исключение при преобразовании байта[] в изображение


Я попробовал этот фрагмент кода ниже, чтобы преобразовать byte[] в System.Рисование.Изображение.
Tuple<int, int, int> t1 = DecimalToDegrees(Convert.ToDecimal(lat));
Tuple<int, int, int> t2 = DecimalToDegrees(Convert.ToDecimal(lon));
string ss = Math.Abs(t1.Item1) + "%C2%B0" + t1.Item2 + "'" + t1.Item3 + "%22N+"
   + Math.Abs(t2.Item1) + "%C2%B0" + t2.Item2 + "'" + t2.Item3 + "%22W/@";
string s1 = ss + t1 + "," + lt2 + ",14z/data=!4m5!3m4!1s0x0:0x0!8m2!3d" + t1 + "!4d" + t2;
s1 = "https://www.google.com/maps/place/" + s1;
System.Net.WebClient client = new System.Net.WebClient();
byte[] data = client.DownloadData(s1);
// where  t1 and t2 are Lat and Lon values in decimal degrees;
System.Drawing.Image chartImage = Base64ToImage(data);  // Call the function below
....
  public System.Drawing.Image Base64ToImage(byte[] imageBytes)  {
    MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
    ms.Write(imageBytes, 0, imageBytes.Length);
    return System.Drawing.Image.FromStream(ms, true);
  }

Однако я получил исключение "параметр недопустим" в
Система.Рисование.Изображение.FromStream(ms, true);
Что не так в моем коде? Спасибо, если вы можете указать на это.

Что я уже пробовал:

Не удалось преобразовать байт[] в изображение

1 Ответов

Рейтинг:
1

OriginalGriff

Если данные находятся в формате Base64, то вам нужно преобразовать их в необработанные байтовые данные, прежде чем вы сможете загрузить их в поток и передать в FromStream.


s yu

Загруженные данные любят это ниже
byte[] data = клиент.DownloadData(s1);
Я не уверен, что его формат-Base64. Не могли бы вы дать свои рекомендации по этому вопросу? Спасибо.

OriginalGriff

Я работаю по названию вашего метода:

государственная система.Рисование.Image Base64ToImage(байт[] imageBytes)

Это означает, что вы думаете, что это Base64 ...

Используйте отладчик, чтобы посмотреть на данные в imageBytes, и если это Base64, то это должно быть очевидно. Скопируйте его в онлайн-декодер Base64 и посмотрите, понравится ли он ему.

s yu

Кто бы ни пытался , всегда терпел неудачу. Объект byte[] загружается с карты google. Я бы предположил, что есть какая-то проблема с форматом. Спасибо.

OriginalGriff

Я бы посоветовал вам сохранить байтовые данные в виде файла и посмотреть, есть ли в нем подпись изображения. Может быть, стоит попробовать это сделать .NET не понимает, но это не значит, что нет простого способа конвертировать его, если вам повезет!

s yu

Ключ, как преобразовать загруженный байт[] в изображение, которое всегда терпит неудачу. Будем тестировать еще. Спасибо.