Insertar imagen en el encabezado del documento de Word con OpenXML

Sé que hubo la misma preguntaaquí, sin embargo, las respuestas son un poco vagas y no muestran el código fuente completo. Tengo un método para generar un encabezado, pero no funciona (muestra x en el lugar de la imagen).

public static void AddPicHeader(string docxFileName) {
        using(WordprocessingDocument doc = WordprocessingDocument.Open(docxFileName, true)) {
            var mainDocPart = doc.MainDocumentPart;
            var imgPart = mainDocPart.AddImagePart(ImagePartType.Png, "rId999");
            var image = GetImageFromFile(logoFileName);
            var imagePartID = mainDocPart.GetIdOfPart(imgPart);
            GenerateImagePartContent(imgPart, image);

            if(!mainDocPart.HeaderParts.Any()) {
                mainDocPart.DeleteParts(mainDocPart.HeaderParts);
                var newHeaderPart = mainDocPart.AddNewPart<HeaderPart>();
                var rId = mainDocPart.GetIdOfPart(newHeaderPart);
                var headerRef = new HeaderReference { Id = rId };
                var sectionProps = doc.MainDocumentPart.Document.Body.Elements<SectionProperties>().LastOrDefault();
                if(sectionProps == null) {
                    sectionProps = new SectionProperties();
                    doc.MainDocumentPart.Document.Body.Append(sectionProps);
                }
                sectionProps.RemoveAllChildren<HeaderReference>();
                sectionProps.Append(headerRef);
                newHeaderPart.Header = GeneratePicHeader(imagePartID);
                newHeaderPart.Header.Save();
            }
        }
    }

    private static Header GeneratePicHeader(string relationshipId) {
        var element =
            new Drawing(
                new DW.Inline(
                    new DW.Extent() { Cx = 990000L, Cy = 792000L },
                    new DW.EffectExtent() {
                        LeftEdge = 0L,
                        TopEdge = 0L,
                        RightEdge = 0L,
                        BottomEdge = 0L
                    },
                    new DW.DocProperties() {
                        Id = (UInt32Value)1U,
                        Name = "NIS Logo"
                    },
                    new DW.NonVisualGraphicFrameDrawingProperties(
                        new A.GraphicFrameLocks() { NoChangeAspect = true }),
                    new A.Graphic(
                        new A.GraphicData(
                            new PIC.Picture(
                                new PIC.NonVisualPictureProperties(
                                    new PIC.NonVisualDrawingProperties() {
                                        Id = (UInt32Value)0U,
                                        Name = "nis.png"
                                    },
                                    new PIC.NonVisualPictureDrawingProperties()),
                                new PIC.BlipFill(
                                    new A.Blip(
                                        new A.BlipExtensionList(
                                            new A.BlipExtension() {
                                                Uri =
                                                    "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                            })
                                    ) {
                                        Embed = relationshipId,
                                        CompressionState =
                                            A.BlipCompressionValues.Print
                                    },
                                    new A.Stretch(
                                        new A.FillRectangle())),
                                new PIC.ShapeProperties(
                                    new A.Transform2D(
                                        new A.Offset() { X = 0L, Y = 0L },
                                        new A.Extents() { Cx = 990000L, Cy = 792000L }),
                                    new A.PresetGeometry(
                                        new A.AdjustValueList()
                                    ) { Preset = A.ShapeTypeValues.Rectangle }))
                        ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
                ) {
                    DistanceFromTop = (UInt32Value)0U,
                    DistanceFromBottom = (UInt32Value)0U,
                    DistanceFromLeft = (UInt32Value)0U,
                    DistanceFromRight = (UInt32Value)0U,
                    EditId = "50D07946"
                });

        var header = new Header();
        var paragraph = new Paragraph();
        var run = new Run();

        run.Append(element);
        paragraph.Append(run);
        header.Append(paragraph);
        return header;
    }

Tal vez alguien lidió con el golpe?

Respuestas a la pregunta(1)

Su respuesta a la pregunta