Возврат изображения в веб-сервис - PullRequest
0 голосов
/ 14 января 2019

Я разрабатываю базовый веб-сервис. Пользователь отправляет строку base 64, и подача должна возвращать изображение.

У меня есть этот класс:

public class myImage
{    
    public Byte[] Matrix { get; set; }        
    public int Width { get; set; }
    public int Height { get; set; }
}

Матрица - это байтовый массив, содержащий значение пикселя в оттенках серого.

Я видел много тем (например, этот или этот ) о преобразовании байтового массива в Image, но у меня это не сработало. Я добавил ссылку на System.Drawing, но у меня есть ошибка:

Не удалось найти имя типа «Изображение» в пространстве имен «System.Drawing». Этот тип был перенаправлен в сборку 'System.Drawing.Common, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51' Рассмотрите возможность добавления ссылки на эту сборку.

Я видел, что должен вернуть FileResult, но не могу создать результат, если не могу использовать System.Drawing.Image:

[HttpPost]
[Route("CreateImage")]
public FileResult PostSealCryptItem([FromBody]String base64)
{
    MyImage myImg = createImg(base64);

    FileResult result = ?;
    return result;
}

Как я могу создать FileResult из моего байтового массива?

1 Ответ

0 голосов
/ 14 января 2019

Вы можете сделать это следующим образом.

public HttpResponseMessage  PostSealCryptItem([FromBody]String base64)
{
    MyImage myImg = createImg(base64);
    Image img = convertMyImgToImage(myImg);
    using(MemoryStream ms = new MemoryStream())
    {
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new ByteArrayContent(ms.ToArray());
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        return result;
    }
}
...