2009-08-25 13 views
2

Ich versuche mehrseitiges TIFF zu bearbeiten, indem ich Grafiken aus dem Bild erstelle, aber ich erhalte die Fehlermeldung: "Ein Grafikobjekt kann nicht aus einem Bild mit einem indizierten Pixel erstellt werden format. "Mehrseitiges TIFF-Bild mit System.Drawing bearbeiten

Wie kann ich mehrseitige tiff bearbeiten? Hier

Antwort

1

Der Fehler: Ein Graphics-Objekt kann nicht von einem Bild geschaffen werden, die ein indiziertes Pixelformat hat.

... nichts zu tun hat mit ihm eine mehrseitige TIFF zu sein. Ein indiziertes Bildformat bedeutet, dass es eine Palette von Farben aufweist, z. es ist ein 256-farbiges Bild. Ein 1-Bit-Bild (B & W) zählen würde auch eine Palette von Farben als 2 aufweist.

Sie können keine Graphics Operationen für Bilder ausführen, die eine Palette verwenden. Sie müssten zuerst in eine Farbtiefe von 15 Bit oder mehr konvertiert werden.

1

ich einmal kleines Programm geschrieben verschlüsselte PDFs aus TIFF-Bildern erstellen. Hier ist ein Stück Code zu bekommen Seiten aus TIFF-Bild:

var bm= new System.Drawing.Bitmap('tif path'); 
var total = bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page); 
for(var x=0;x<total;x++) 
{ 
    bm.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page,x); 
    var img=Image.GetInstance(bm,null,false); 

    //do what ever you want with img object 
} 
+2

Ich kann nicht GetInstance Methode von Bild finden? – Tamir

6

Ich schrieb etwas einzelne Seiten aus einer Mehrseitentiff Datei zu extrahieren.

// Load as Bitmap 
using (Bitmap bmp = new Bitmap(file)) 
{ 
    // Get pages in bitmap 
    int frames = bmp.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page); 
    bmp.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, tiffpage); 
    if (bmp.PixelFormat != PixelFormat.Format1bppIndexed) 
    { 
     using (Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height)) 
     { 
      bmp2.Palette = bmp.Palette; 
      bmp2.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution); 
      // create graphics object for new bitmap 
      using (Graphics g = Graphics.FromImage(bmp2)) 
      { 
       // copy current page into new bitmap 
       g.DrawImageUnscaled(bmp, 0, 0); 

           // do whatever you migth to do 
       ... 

      } 
     } 
    } 
} 

Die Schnipsel lädt die TIF-Datei und extrahiert die eine Seite (Anzahl in variable tiffpage) in eine neue Bitmap. Dies wird nicht indiziert und ein Grafikobjekt kann erstellt werden.

+1

Es sollte angemerkt werden, dass in SelectActiveFrame, tiffpage = 0 Seite 1 sein wird. –