Merging two tiff image using c#.net

后端 未结 2 791
生来不讨喜
生来不讨喜 2020-12-18 10:41

In my scenario i have two tiff image in different location say

c:/temp/img1.tiff and x:/temp/img2.tiff.

I need to merge these imag

相关标签:
2条回答
  • 2020-12-18 11:13

    There could be a couple ways to "merge" images. Here's a couple in pseudocode:

    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);
       }
    }
    
    0 讨论(0)
  • 2020-12-18 11:28

    To do this using just the Framework classes, you basically do this:

    1. Load each of your TIFF images into a Bitmap object, e.g. using Image.FromFile.
    2. Save the first page with an encoder parameter Encoder.SaveFlag = EncoderValue.MultiFrame
    3. Save each subsequent page to the same file with an encoder parameter of Encoder.SaveFlag = EncoderValue.FrameDimensionPage using Bitmap.SaveAdd()

    It would look something like this:

    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);
    
    0 讨论(0)
提交回复
热议问题