2012-01-20 50 views
2

現在、.NETを使用して複数ページのTIFFを別々のJPEG/PNGに分割しています。独自のプロセスは完璧です。しかし数週間後、私はページサイズの大きな欠点に気付きました。分割した各ページは、TIFF文書全体を結合したものと同じです(幅/高さではなくファイルサイズ)。 TIFFが表示されると、画像の右/下に大量の黒い点ができます。これは非常に大きな欠陥です。なぜなら、各ページの物理的な大きさを区別することができないからです。私が前もって知っていれば、少なくとも何らかの作付メカニズムを書くことができます。どんな助言も高く評価されます。複数ページのTIFFを別々のページに分割する

 System.IO.Stream s = 
      new System.IO.MemoryStream(imageData); 

     System.Drawing.Image i = 
      System.Drawing.Image.FromStream(s); 

     int NumberOfFrames = i.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page); 

     List<byte[]> imageCollection = new List<byte[]>(); 

     for (int f = 0; f < NumberOfFrames; f++) 
     { 
      i.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, f); 

      Bitmap b = new Bitmap(i.Width, i.Height); 

      Graphics g = Graphics.FromImage(b); 
      g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; 
      g.DrawImageUnscaled(i, 0, 0); 
      g.Dispose(); 
      imageCollection.Add((byte[])System.ComponentModel.TypeDescriptor.GetConverter(b).ConvertTo(b, typeof(byte[]))); 
     } 

     return imageCollection; 
+1

TiffBitmapDecoderは役に立ちますか? http://stackoverflow.com/questions/3398881/extract-frame-from-multi-page-tiff-c-sharp –

+0

でこれを使用する例があります。試していることに対して「描画」が起こってはいけませんする。生データは、デコード/描画/再エンコードすることなく個々のファイルに再パッケージ化することができます。これはおそらくあなたが使用している高水準言語の制限です。あなたはコーデックを必要とせず、TIFFタグを操作する必要もないので、単にIFDリストを歩き、ファイルを分解して、新しいタグの中で(相対ではないので)各タグのオフセットをリセットするだけですファイル。 – BitBank

+0

私はbitmiracle.comからLibTiff.NETをダウンロードしました。それは私が探している機能を持っているように見えます。それがどうなるか見てみましょう。私は上記の混乱を傷つけ、すべてがうまくいくならばLibTiffを使わなければならないかもしれません。投稿され続ける。 – Shrini

答えて

0

問題の説明はわかりませんが、分割しているページにアルファチャンネルのデータがあるようです。あなたが正しく処理していないように聞こえるので、結果のビットマップは透明でなければならないデフォルトの黒色を示します。

そのような場合、その後:

1)は、アルファチャネルを正しく

2を処理するために、抽出を修正)ボックスにアルファの量を最小限に抑え、最小のバウンディングボックスを見つける方法を記述し、画像をそのボックスにトリミングします。

関連する問題