使用c#.net合并两个tiff图像

4
在我的情况下,我有两个不同位置的tiff图像,例如:c:/temp/img1.tiffx:/temp/img2.tiff。我需要以编程方式将这些图像合并为单个图像。请提供一些想法/代码。
谢谢,
Dev

1
合并怎么做?横向还是纵向连接? - Bala R
我必须一个接一个地加入(垂直地)。 - Dev
https://dev59.com/YXRC5IYBdhLWcg3wJNgN - Immanuel Ebel
2个回答

3
要使用框架类完成此操作,您基本上需要执行以下步骤:
  1. 将每个TIFF图像加载到Bitmap对象中,例如使用 Image.FromFile。
  2. 使用编码器参数 Encoder.SaveFlag = EncoderValue.MultiFrame 保存第一页。
  3. 使用编码器参数 Encoder.SaveFlag = EncoderValue.FrameDimensionPage 和 Bitmap.SaveAdd() 将每个后续页面保存到同一文件中。
代码示例如下:
ImageCodecInfo tiff = null;
foreach ( ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders() )
{
    if ( codec.MimeType == "image/tiff" )
    {
        tiff = codec;
        break;
    }
}

Encoder encoder = Encoder.SaveFlag;
EncoderParameters parameters = new EncoderParamters(1);
parameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

bitmap1.Save(newFileName, tiff, parameters);

parameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);
bitmap2.SaveAdd(newFileName, tiff, paramters);

parameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
bitmap2.SaveAdd(parameters);

我还要补充一点,我们公司很久以前就决定购买了一个工具包(在我们的情况下,我们使用LEADTools),用于这种类型的事情,因为GDI+并不是Framework中最快的执行部分,而且代码变得很繁琐。根据您的预算限制,您可能需要考虑一下这个。 - Michael Edenfield
“Image”类没有带有字符串参数的“SaveAdd”方法。 - Steffen Winkler

0

合并图像可能有几种方法。以下是一些伪代码:

var NewImage = new Image();

ForEach (curPixel in img1)
{
   var newColor = new Color();
   newColor.RGB = (Pixel.Color.RGB + img2.PixelAt(curPixel.Location).Color.RGB) / 2
   NewImage.PixelAt(curPixel.Location) = new Pixel(newColor);
}

///OR    

int objCounter = 0;
ForEach (curPixel in Image)
{
   if(objCounter % 2 == 0){
      NewImage.PixelAt(curPixel.Location) = img1.PixelAt(curPixel.Location);
   } else {
      NewImage.PixelAt(curPixel.Location) = img2.PixelAt(curPixel.Location);
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接