使用c#.net合并两个tiff图像
在我的场景中,我有两个不同位置的tiff图像说
c:/temp/img1.tiff
和x:/temp/img2.tiff
。
我需要以编程方式将这些图像合并为单个图像
提出一些想法/代码。
谢谢,
开发
要仅使用Framework类来执行此操作,您基本上执行此操作:
- 将每个TIFF图像加载到Bitmap对象中,例如使用
Image.FromFile
。 - 使用编码器参数
Encoder.SaveFlag
=EncoderValue.MultiFrame
保存第一页 - 使用
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);
可能有几种方法可以“合并”图像。 这是一对伪代码:
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); } }