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

时间:2011-07-01 13:44:07

标签: c# image-processing tiff

在我的场景中,我在不同位置有两个tiff图像说

c:/temp/img1.tiffx:/temp/img2.tiff

我需要以编程方式将这些图像合并为单个图像

提出一些想法/代码。

谢谢,

开发

2 个答案:

答案 0 :(得分:3)

要仅使用Framework类执行此操作,基本上可以执行此操作:

  1. 将每个TIFF图像加载到Bitmap对象中,例如使用Image.FromFile
  2. 使用编码器参数Encoder.SaveFlag = EncoderValue.MultiFrame
  3. 保存第一页
  4. 使用Encoder.SaveFlag()
  5. 将每个后续页面保存到编码器参数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);
    

答案 1 :(得分: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);
   }
}