Проблема с заполнением части изображения в Open XML Document с помощью OpenXML SDK - PullRequest
0 голосов
/ 28 мая 2019

У меня проблема с заполнением изображения поверх части изображения в документе.После обнаружения нужной части (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

У кого-нибудь есть идеи по поводу того, почему это происходит?

Мне нужен второйработать, т.е. я получаю изображение как растровый объект, а не как имя файла.

...