У меня проблема с заполнением изображения поверх части изображения в документе.После обнаружения нужной части (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
У кого-нибудь есть идеи по поводу того, почему это происходит?
Мне нужен второйработать, т.е. я получаю изображение как растровый объект, а не как имя файла.