Ich möchte Bilder aus einer PDF extrahieren. Ich benutze iTextSharp jetzt. Einige Bilder können korrekt extrahiert werden, aber die meisten von ihnen haben nicht die richtigen Farben und sind verzerrt. Ich habe einige Experimente mit verschiedenen PixelFormats, aber ich habe keine Lösung für mein Problem ...Extract FlateDecode Bilder mit iTextSharp
Dies ist der Code erhalten, welche die Bildtypen trennt:
if (filter == "/FlateDecode")
{
// ...
int w = int.Parse(width);
int h = int.Parse(height);
int bpp = tg.GetAsNumber(PdfName.BITSPERCOMPONENT).IntValue;
byte[] rawBytes = PdfReader.GetStreamBytesRaw((PRStream)tg);
byte[] decodedBytes = PdfReader.FlateDecode(rawBytes);
byte[] streamBytes = PdfReader.DecodePredictor(decodedBytes, tg.GetAsDict(PdfName.DECODEPARMS));
PixelFormat[] pixFormats = new PixelFormat[23] {
PixelFormat.Format24bppRgb,
// ... all Pixel Formats
};
for (int i = 0; i < pixFormats.Length; i++)
{
Program.ToPixelFormat(w, h, pixFormats[i], streamBytes, bpp, images));
}
}
Dies ist der Code Speichern Sie das Bild in einem MemoryStream. Das Speichern des Bildes in einem Ordner wird später implementiert.
private static void ToPixelFormat(int width, int height, PixelFormat pixelformat, byte[] bytes, int bpp, IList<Image> images)
{
Bitmap bmp = new Bitmap(width, height, pixelformat);
BitmapData bmd = bmp.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.WriteOnly, pixelformat);
Marshal.Copy(bytes, 0, bmd.Scan0, bytes.Length);
bmp.UnlockBits(bmd);
using (var ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
bytes = ms.GetBuffer();
}
images.Add(bmp);
}
Bitte helfen Sie mir.
Überprüfen Sie diese Antwort mit einigen neuen Funktionen in 5.1.3 und höher: http://Stackoverflow.com/a/8511314/231316 –
Es ist richtig, dass die Lösung funktioniert (das erste der Beispiele). Aber die Farben sind immer noch invers oder verzerrt. Danke für deine Antwort. –