Sunday, 11 August 2013

MetaFile to Multi-Tiff Image

MetaFile to Multi-Tiff Image

I am trying to convert multiple images to a multi-tiff image file. When i
run the code below on more than one image i get a "A generic error
occurred in GDI+." error. If i have just one image then it works fine and
outputs the file. If i change the code to bitmap and the list to bitmap
then the code works fine with multiple images.
public List<Metafile> metaFileList = new List<Metafile>();
private void writeImagesToEnhancedMetaMulTiff()
{
ImageCodecInfo info = null;
foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders())
if (ice.MimeType == "image/tiff")
info = ice;
System.Drawing.Imaging.Encoder enc =
System.Drawing.Imaging.Encoder.SaveFlag;
EncoderParameters ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(enc,
(long)EncoderValue.MultiFrame);
Metafile pages = null;
int frames = 0;
foreach (Metafile metaFileItem in metaFileList)
{
if (frames == 0)
{
pages = metaFileItem;
pages.Save(@"E:\output_MetaFile.tif", info, ep);
}
else
{
ep.Param[0] = new EncoderParameter(enc,
(long)EncoderValue.FrameDimensionPage);
pages.SaveAdd(metaFileItem, ep);
}
if (frames >= metaFileList.Count() - 1)
{
ep.Param[0] = new EncoderParameter(enc,
(long)EncoderValue.Flush);
}
frames++;
}
}
To access the get the clipboard as a metafile i have been using this code:
public System.Drawing.Imaging.Metafile
GetEnhMetafileOnClipboard(IntPtr hWnd)
{
System.Drawing.Imaging.Metafile meta = null;
if(OpenClipboard(hWnd))
{
try
{
if (IsClipboardFormatAvailable(CF_ENHMETAFILE) != 0)
{
IntPtr hmeta = GetClipboardData(CF_ENHMETAFILE);
meta = new System.Drawing.Imaging.Metafile(hmeta, true);
metaFileList.Add(meta);
}
}
finally
{
CloseClipboard();
}
}
return meta;
}
Let me know if you need me to provide more code.
Thanks.

No comments:

Post a Comment