Hi,
Iam trying to save .pdf with multiple pages and compressed images as described here:
http://forum.pdfsharp.net/viewtopic.php?f=2&t=1825&p=5206&hilit=compress#p5206In order to use compressed images in my document, I saved the images as compressed .jpeg to a stream.
Code:
EncoderParameter epQuality = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)30);
ImageCodecInfo[] iciCodecs = ImageCodecInfo.GetImageEncoders();
EncoderParameters epParameters = new EncoderParameters(1);
epParameters.Param[0] = epQuality;
img.Save(stream, iciCodecs.Single((i) => i.MimeType == "image/jpeg"), epParameters);
Then I create the XImages from that stream...
Code:
var xImg = XImage.FromGdiPlusImage(System.Drawing.Image.FromStream(stream);
Unfortunately it does not work this way...Am I doing something wrong?Here is my complete source:
Code:
public void AddImage(System.Drawing.Bitmap img, string path)
{
try
{
// Compress image first
using (var stream = new MemoryStream())
{
EncoderParameter epQuality = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)30);
ImageCodecInfo[] iciCodecs = ImageCodecInfo.GetImageEncoders();
EncoderParameters epParameters = new EncoderParameters(1);
epParameters.Param[0] = epQuality;
img.Save(stream, iciCodecs.Single((i) => i.MimeType == "image/jpeg"), epParameters);
using (var xImg = XImage.FromGdiPlusImage(System.Drawing.Image.FromStream(stream)))
{
var page = _document.AddPage();
page.Width = XUnit.FromCentimeter(21).Point;
page.Height = XUnit.FromCentimeter(29.7).Point;
var rect = new XRect(
PixelToPoints(0, img.HorizontalResolution),
PixelToPoints(0, img.HorizontalResolution),
PixelToPoints(img.Width, img.HorizontalResolution),
PixelToPoints(img.Height, img.HorizontalResolution));
using (var gfx = XGraphics.FromPdfPage(page, XGraphicsUnit.Point))
{
gfx.DrawImage(XImage.FromGdiPlusImage(img), rect);
}
}
}
}
catch (System.Exception ex)
{
}
}