Witam, Używam biblioteki iTextSharp do watermarkowania pdf-ów, i wygląda to następująco:

* pathFrom - ścieżka do pliku PDF źródłowego 
*  outputPath - ścieżka do docelowego pliku 
*  tmpFolder - przygotowany folder tymczasowy



   PdfReader reader = new PdfReader(pathFrom);

  using (PdfStamper stamper = new PdfStamper(reader, new FileStream(outputPath, FileMode.CreateNew)))
                {

             AddImagesWatermark(reader,  tmpFolder)

             stamper.Close();
                }
                reader.Close();

 /** Wyszukujemy wszystkie obrazki w zasobach pliku PDF */
                    List<PdfObject> imageObjects = findAllImagesInsidePdfResources(pdf, temporaryDirPath);

Czy poniższy kod jest błędny i to on odwraca kolory ?? Ja już sam nie wiem

 /** Równolegle przechodzę przez strony w PDF i wyszukuję "resource" typu "IMAGE", które potencjalnie można zwatermarkować */
        private static List<PdfObject> findAllImagesInsidePdfResources(PdfReader pdf, string temporaryDirPath)
        {
            List<PdfObject> imageObjects = new List<PdfObject>(4096);

            Parallel.For(1, pdf.NumberOfPages + 1, i =>
            {
                PdfDictionary pg = pdf.GetPageN(i);
                PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
                PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));

                if (xobj != null)
                {
                    Parallel.ForEach(xobj.Keys, name =>
                    {
                        PdfObject obj = xobj.Get(name);
                        if (obj.IsIndirect())
                        {
                            PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
                            if (tg != null)
                            {
                                PdfName objectType = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
                                if (PdfName.IMAGE.Equals(objectType))
                                {
                                    PdfName filter = (PdfName)tg.Get(PdfName.FILTER);
                                    if (filter != null && PdfName.DCTDECODE.Equals(filter))
                                    {
                                        imageObjects.Add(obj);
                                    }
                                }
                            }
                        }
                    });
                }
            });

            return imageObjects;
        }

po wrzuceniu image do folderu temp, kolory na większości zdjęć są odwrócone. Wykrywane są one przez inne metody jako ICC Base, jpg.

 foreach (var obj in imageObjects)
                        {
                            try
                            {
                                PdfStream str = (PdfStream)pdf.GetPdfObject(((PRIndirectReference)obj).Number);
                                PdfImageObject pdfImage = new PdfImageObject((PRStream)str);

                                System.Drawing.Image image = pdfImage.GetDrawingImage();
                                
                                String temporaryImagePath = temporaryDirPath + "\\tempIn" + watermarkedImgCount + ".jpg";
                                image.Save(temporaryImagePath);

                                String outputImgPath = temporaryDirPath + "\\tempOut" + watermarkedImgCount + ".jpg";

                             
                              }
                            catch (Exception e)
                            {
                                errorMessage = "Cannot watermark pdf image: " + e.Message;
                                log.Error("PDFWatermarkImage: Exception: " + e.Message, e);
                            }