【问题标题】:Merging two tiff image using c#.net使用 c#.net 合并两个 tiff 图像
【发布时间】:2011-07-01 13:44:06
【问题描述】:

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

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

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

提出一些想法/代码。

谢谢,

开发

【问题讨论】:

标签: c# image-processing tiff


【解决方案1】:

要仅使用框架类来执行此操作,您基本上可以这样做:

  1. 将每个 TIFF 图像加载到位图对象中,例如使用Image.FromFile
  2. 用编码器参数保存第一页Encoder.SaveFlag = EncoderValue.MultiFrame
  3. 使用Bitmap.SaveAdd() 使用Encoder.SaveFlag = EncoderValue.FrameDimensionPage 的编码器参数将每个后续页面保存到同一文件中

看起来像这样:

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);

【讨论】:

  • 我还要补充一点,我的公司很久以前就决定购买一个使用非托管 GDI 的工具包(在我们的例子中,我们使用 LEADTools),因为 GDI+ 并不是性能最快的框架的一部分,代码变得乏味。根据您的预算限制,您可能需要对此进行调查。
  • “Image”类没有采用字符串的“SaveAdd”方法。
【解决方案2】:

可能有几种方法可以“合并”图像。这是一对伪代码:

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);
   }
}

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 2019-06-14
    • 2011-09-17
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多