Как справиться с PNG от остальных API? - PullRequest
0 голосов
/ 18 октября 2018

Сейчас я создаю сервис WCF , который отправляет местоположение в API Bing Map и возвращает изображение PNG клиенту службы.В настоящее время я скопировал пример рабочего API с их веб-страницы документации, и мне трудно понять, как я могу передать его.

Из других вопросов, связанных со стековым потоком, я начал с преобразования ответа, и яполучил это в Base64.Но это вызвало и получило ошибку, которая говорит, что ввод не в Base64 форме.

Скриншот того, как выглядит ввод

public string getResponse()
{
    string key = [My Api Key];

    Uri geocodeRequest = new Uri(string.Format("http://dev.virtualearth.net/REST/v1/Locations?q={0}&key={1}", query, key));
    Uri imageryRequest = new Uri(string.Format("https://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Redmond Washington?ms=500,270&zl=12&&c=en-US&he=1&key={0}", key));

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imageryRequest);
    request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    //Handling the response in PNG
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);

    string input = reader.ReadToEnd();

    byte[] data = convert.FromBase64String(input);
    return data;


}

1 Ответ

0 голосов
/ 18 октября 2018

Это уже PNG-изображение как byte[].Кроме того, имейте в виду, что возвращаемое изображение не обязательно будет PNG, JPEG или GIF.Он возвращает то, что он считает наиболее подходящим типом изображения, если не запрошен определенный тип .

ex.fmt=jpeg

Map image

Вам просто нужно что-то с этим сделать.В моем примере я сохранил его в файл.Возможно, вам просто нужно вернуть byte[].

private static HttpClient client = new HttpClient();
public static async void GetResponse()
{
    string key = Properties.Settings.Default.Key;

    Uri imgUri = new Uri($"https://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Redmond Washington?ms=500,270&zl=12&&c=en-US&he=1&fmt=png&key={key}");

    HttpResponseMessage response = await client.GetAsync(imgUri);
    response.EnsureSuccessStatusCode();
    byte[] responseData = await response.Content.ReadAsByteArrayAsync();

    File.WriteAllBytes("test.png", responseData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...