Как создать объект Image из MemoryStream в C# с помощью iText7? - PullRequest
2 голосов
/ 17 января 2020

Я работаю с iText7 в ASP. NET - MVC v5.2. Я очень неопытен с iText и C# все еще пытаюсь выяснить, как работают классы в этой библиотеке.

Скажем, у меня есть MemoryStream, который содержит изображение ...

MemoryStream imgStream = new MemoryStream(imgLocation);

Как я могу создать объект Image, используя imgStream? Я ищу что-то вроде

Image img = new Image(imgStream);

Спасибо за помощь:)

РЕДАКТИРОВАТЬ : я пытаюсь создать изображение из iText, а не System.Drawing.Image

Ответы [ 2 ]

5 голосов
/ 17 января 2020

Чтобы создать объект iText 7 Image из растрового изображения, сначала необходимо создать экземпляр ImageData, который затем можно передать в один из соответствующих Image конструкторов

public Image(ImageData img);
public Image(ImageData img, float left, float bottom);
public Image(ImageData img, float left, float bottom, float width);

Обычно вы создаете экземпляр ImageData, используя соответствующие методы ImageDataFactory stati c:

public static ImageData Create(byte[] bytes);
public static ImageData Create(String filename);
public static ImageData Create(Uri url);

Как видите, для потока нет метода. Но так как ваш поток MemoryStream, вы можете легко получить byte[] изображения. Таким образом,

byte[] imageBytes = imgStream.ToArray();
ImageData rawImage = ImageDataFactory.Create(imageBytes);
Image image = new Image(rawImage);
0 голосов
/ 17 января 2020

Преобразуйте MemoryStream в byte[] и используйте метод GetInstance

public static byte[] GetByteArray(Stream input)
{
    byte[] buffer = new byte[16*1024];
    using (MemoryStream ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}

, а затем используйте байтовый массив, подобный этому

var Image = Image.GetInstance(GetByteArray(imgStream));
...