Слияние двух изображений tiff с использованием c # .net - PullRequest
4 голосов
/ 01 июля 2011

В моем сценарии у меня есть два изображения tiff в разных местах, скажем

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

Мне нужно программно объединить эти изображения в одно изображение

предложить несколько идей / кодов.

Спасибо,

Dev

Ответы [ 2 ]

3 голосов
/ 01 июля 2011

Чтобы сделать это, используя только классы Framework, вы в основном делаете это:

  1. Загрузите каждое из ваших изображений TIFF в растровый объект, например, используя 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);
0 голосов
/ 01 июля 2011

Может быть несколько способов «объединить» изображения. Вот пара в псевдокоде:

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