PDFSharpでPDF文書からFlateDecodedされた画像(PNGなど)を抽出するにはどうすればよいですか?PDFSharpでPDFからFlateDecoded画像を抽出する方法
私はPDFSharpのサンプルでそのコメントを見つけました:
// TODO: You can put the code here that converts vom PDF internal image format to a
// Windows bitmap
// and use GDI+ to save it in PNG format.
// [...]
// Take a look at the file
// PdfSharp.Pdf.Advanced/PdfImage.cs to see how we create the PDF image formats.
誰もがこの問題の解決策を持っていますか?
返信いただきありがとうございます。
EDIT:私は8時間以内に自分の質問に答えることができないんだけどなので、私はそのようにそれを行う:あなたの非常に高速な応答のための
感謝を。
メソッド "ExportAsPngImage"にいくつかのコードを追加しましたが、希望の結果が得られませんでした。もう少しイメージ(png)を抽出しているだけで、正しい色を持たず歪んでいます。
ここに私の実際のコードです:
PdfSharp.Pdf.Filters.FlateDecode flate = new PdfSharp.Pdf.Filters.FlateDecode();
byte[] decodedBytes = flate.Decode(bytes);
System.Drawing.Imaging.PixelFormat pixelFormat;
switch (bitsPerComponent)
{
case 1:
pixelFormat = PixelFormat.Format1bppIndexed;
break;
case 8:
pixelFormat = PixelFormat.Format8bppIndexed;
break;
case 24:
pixelFormat = PixelFormat.Format24bppRgb;
break;
default:
throw new Exception("Unknown pixel format " + bitsPerComponent);
}
Bitmap bmp = new Bitmap(width, height, pixelFormat);
var bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, pixelFormat);
int length = (int)Math.Ceiling(width * bitsPerComponent/8.0);
for (int i = 0; i < height; i++)
{
int offset = i * length;
int scanOffset = i * bmpData.Stride;
Marshal.Copy(decodedBytes, offset, new IntPtr(bmpData.Scan0.ToInt32() + scanOffset), length);
}
bmp.UnlockBits(bmpData);
using (FileStream fs = new FileStream(@"C:\Export\PdfSharp\" + String.Format("Image{0}.png", count), FileMode.Create, FileAccess.Write))
{
bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
}
は正しい方法ということですか?それとも別の方法を選ぶべきですか?どうもありがとう!
あります。だからMarshal.Copyはしません、コピー中にバイトをスワップする必要があります。したがって、色が間違っています。 BMPデータをDWORD境界で整列させません。それは歪みを説明するはずです。 –