使用OpenXML SDK填充Open XML文档中的图像部分时出现问题

时间:2019-05-28 12:51:05

标签: image bitmap openxml

我在将图像填充到文档中的图像部分时遇到问题。 找到正确的部分(graphic / graphicData / pic / blipfill / fill)后,我使用FeedData方法将当前图像替换为新图像。

  • 将FeedData方法与从文件中直接提取的字节数组(File.ReadAllBytes)一起使用是可行的。

  • 但是,如果我使用从位图对象中提取的字节数组(即使它是从同一个文件加载的)来馈送FeedData方法,则它确实可以工作。

c#

using (Stream stream = new MemoryStream((byte[])imageBytes))
    imagePart.FeedData(stream);
// this works

using (Stream stream = new MemoryStream(BitmapToByteArray(bitmap)))
{
    stream.Position = 0L;
    imagePart.FeedData(stream);
}
byte[] BitmapToByteArray(Bitmap bitmap)
{
    BitmapData bmpData = null;
    try
    {
        bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);

        int byteCount = bmpData.Stride * bitmap.Height;
        byte[] byteData = new byte[byteCount];
        IntPtr ptr = bmpData.Scan0;
        Marshal.Copy(ptr, byteData, 0, byteCount);

        return byteData;
    }
    finally
    {
        if (bmpData != null) bitmap.UnlockBits(bmpData);
    }
}
// this will not work, 
// the document will be created with a red box inplace of the original template image

有人对为什么会这样有想法吗?

我需要第二个才能工作,即我将图像作为位图对象而不是文件名来接收。

0 个答案:

没有答案