如何将 PNG 作为字节 [] 提供给 HtmlImageLoadEventArgs 回调?

How to serve PNG to HtmlImageLoadEventArgs callback as byte[]?

我正在使用 HTML Renderer 创建 PDF。我为服务器图像 (PNG) 实现了图像提供程序。它的 HandleImageLoad 被正确调用,但提供的 imgae 未显示在 PDF 中,而是看起来像时钟(?)图像的东西。

这是设置:

ImageProvider imgProvider = new ImageProvider();

PdfSharp.Pdf.PdfDocument pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(
    HTML, PdfSharp.PageSize.A4, 20, 
    null, null, imgProvider.HandleImageLoad);

public void HandleImageLoad(object sender, HtmlImageLoadEventArgs args)
{
      var img = LoadFromSource(args.Src);
        if(img == null)
        {
            args.Handled = false;
            args.Callback();
            Log.Error("Missing image: {0}", args.Src);
        }
        else
        {
            args.Handled = true;
            args.Callback(img.Data);
        }                                       
} 

变量 img 已将 PNG 作为 byte[] 存储在名为 Data 的成员中。我是否需要任何转换或中间对象来将图像 属性 渲染为图像?

好的,我知道了。图像类型必须是 PdfSharp.Drawing.XImage 类型。最简单的方法是将 PNG 文件加载为 System.Drawing.Image.

using (var mem = new MemoryStream(img.Data))
{
    System.Drawing.Image sysImg = System.Drawing.Image.FromStream(mem, false, true);
    var ximg = PdfSharp.Drawing.XImage.FromGdiPlusImage(sysImg);
    args.Callback(ximg);
}