在不使用system.drawing.image的情况下加载图像

本文关键字:情况下 加载 图像 image drawing system | 更新日期: 2023-09-27 18:31:41

我想加载一个图像流,以便可以使用PDFsharp将其转换为pdf。

以下代码在我的测试/控制台应用程序中工作,但在使用 Framework 4.6.1 运行的项目中不起作用 ASP.NET。这是因为我使用的是System.Drawing.Image

不支持在 Windows 或 ASP.NET 服务中使用 System.Drawing.Imaging 命名空间中的类。尝试从这些应用程序类型之一中使用这些类可能会产生意外问题,例如服务性能降低和运行时异常。

资料来源:Microsoft

我们如何解决这个问题?我的偏好是将所有内容都放在内存中。

我在控制台应用程序中的工作代码:

PdfDocument pdfDoc = new PdfDocument();
pdfDoc.Pages.Add(new PdfPage());
MemoryStream MemStream = new MemoryStream(inputStream); // Inputstream as byte[]
Image imgSource = Image.FromStream(MemStream); // This will fail
XImage imgX = XImage.FromGdiPlusImage(imgSource);
XGraphics xgr = XGraphics.FromPdfPage(pdfDoc.Pages[0]);
xgr.DrawImage(imgX, 0, 0);
MemoryStream outputStream = new MemoryStream();
pdfDoc.Save(outputStream, false);
byte[] dataConverted = outputStream.ToArray();
pdfDoc.Close();
return dataConverted;

在不使用system.drawing.image的情况下加载图像

只需将流传递给 PDFsharp:

public static XImage FromStream(Stream stream)

在PDFsharp 1.50中,此方法是公开的。我认为它在 1.3x 版本中不是公开的。

使用

PDFsharp 的 WPF 构建 - GDI 构建在内部使用Image.FromStream