Замените изображение в существующем многостраничном Tiff с помощью .Net

Используя .Net, как заменить первую страницу многостраничного TIFF-файла новым изображением. Желательно без создания нового файла.


person Dug    schedule 23.11.2009    source источник


Ответы (2)


Я думаю, вы не могли бы сделать это, не создавая еще один файл.

Вы можете сначала прочитать все изображения, заменить изображение, которое хотите заменить, закрыть исходный источник, а затем заменить файл новым многостраничным TIFF, но я считаю, что это будет использовать много памяти. Я читал изображение за раз, записывал его в новый файл и, в качестве последнего шага, менял имена файлов.

Что-то вроде:

 // open a multi page tiff using a Stream
 using(Stream stream = // your favorite stream depending if you have in memory or from file.)
 {
 Bitmap bmp = new Bitmap(imagePath);

 int frameCount = bmp.GetFrameCount(FrameDimension.Page);

 // for a reference for creating a new multi page tiff see: 
 // http://www.bobpowell.net/generating_multipage_tiffs.htm
 // Here all the stuff of the Encoders, and all that stuff.

 EncoderParameters ep = new EncoderParameters(1);
 ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);

 Image newTiff = theNewFirstImage;

 for(int i=0; i<frameCount; i++)
 {
     if(i==0)
     {
          // Just save the new image instead of the first one.
          newTiff.Save(newFileName, imageCodecInfo, Encoder);
     }
     else
     {
          Bitmap newPage = bmp.SelectActiveFrame(FrameDimension.Page);
          newTiff.SaveAdd(newPage, ep);
     }
 }

 
 ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
 newTiff.SaveAdd(ep);
 }
 // close all files and Streams and the do original file delete, and newFile change name... 

Надеюсь, поможет. По вопросам, связанным с визуализацией .NET, обращайтесь к Бобу Пауэллу есть много хороших вещей.

person Edgar Hernandez    schedule 23.11.2009

Это довольно легко сделать. На этой учебной странице CodeProject есть исходный код, который поможет вам сделать то, что вы хотите.

По сути, вам нужно сделать вызов Image .GetFrameCount(), который даст вам количество изображений в вашем многостраничном TIFF (просто чтобы подтвердить, что у вас действительно есть многостраничный TIFF).

Возможно, вам придется поэкспериментировать с тем, как вы сохраните полученный TIFF — вам может потребоваться повторно собрать TIFF вручную, или вы сможете отредактировать / заменить изображение непосредственно перед записью TIFF обратно на диск.

person Charlie Salts    schedule 23.11.2009