Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing Bitmap to OpenXML ImagePart via MemoryStream

Tags:

openxml

I have an image stored in a Bitmap object that I'd like to stick into an OpenXML document. I've tried using a MemoryStream as an intermediate step as follows:

ImagePart part = container.AddNewPart<ImagePart>("image/jpeg", imageId);
using (MemoryStream ms = new MemoryStream())
{
    bitmap.Save(ms, ImageFormat.Jpeg);
    part.FeedData(ms);
}

but that always results in empty files in the media folder and PowerPoint displaying an error instead of the images. I know that the MemoryStream has the image data correctly as I've written it out to a file without issue. When I try to load an image from a FileStream it works just fine.

How can I get this Bitmap into an OpenXML document?

like image 328
Matthew Jacobs Avatar asked Jul 20 '11 17:07

Matthew Jacobs


1 Answers

I was almost there, I just needed to reset the MemoryStream's position to the beginning after saving the Bitmap to it.

ms.Position = 0;

That line should be added between the Save and FeedData calls.

like image 189
Matthew Jacobs Avatar answered Sep 28 '22 15:09

Matthew Jacobs