複数の画像をマルチ TIFF 画像ファイルに変換しようとしています。以下のコードを複数の画像で実行すると、「GDI+ で一般的なエラーが発生しました」というメッセージが表示されます。エラー。画像が 1 つしかない場合は、正常に動作し、ファイルを出力します。コードをビットマップに変更し、リストをビットマップに変更すると、コードは複数の画像で正常に機能します。
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++;
}
}
クリップボードをメタファイルとして取得するには、次のコードを使用しています。
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;
}
さらにコードを提供する必要がある場合はお知らせください。
ありがとう。