我在将图像填充到文档中的图像部分时遇到问题。 找到正确的部分(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
有人对为什么会这样有想法吗?
我需要第二个才能工作,即我将图像作为位图对象而不是文件名来接收。