1

FreeImage でこのコードを試して tif をロードしましたが、エラーは発生しませんが、出力もありません。入力がjpgの場合は問題なく動作します。私の tiff 入力は 16 ビット グレースケールです。

public void OpenRotateSave()
    {
        // load image,  16-bit tif 
       FIBITMAP dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_TIFF, "Mytif.tif",FREE_IMAGE_LOAD_FLAGS.DEFAULT);         
        // save image
        FreeImage.SaveEx(dib, "MyTifOut.jpg");
        // unload bitmap
        FreeImage.UnloadEx(ref dib);
    }

ファイル名だけを使用して、修飾子なしでロードしようとしましたが、同じ結果になりました。LoadExも試しました。

どうもありがとう、ダン

4

2 に答える 2

1

http://downloads.sourceforge.net/freeimage/FreeImage3170.pdf 117 ページ、付録、サポートされているファイル形式によると 、FreeImage は 16 ビット PNG をサポートしていません。

仕様 https://en.wikipedia.org/wiki/Portable_Network_Graphics#Pixel_format では、アルファなしの 16 ビット グレースケールが許可されています。私は一度も見たことがありません...

于 2013-11-22T21:44:40.837 に答える
0

最新のディストリビューションの Wraper フォルダーにある Load と Save の例を使用して、多くの進歩を遂げました。

FreeImage\Wrapper\FreeImage.NET\cs\Samples\Sample 01 - 読み込みと保存

読み込みは問題なく行われましたが、16 ビット イメージを保存するのはそれほど簡単ではないようです。8ビットまたはグレースケールに変換してからjpegとして保存しようとしましたが、出力もエラーメッセージもありませんでした。私が見つけたのは、次のようにPNGに保存することです:

public void OpenSave()
  {
  string InFileName = "MyTiff.tif";
  string OutFileName = "MyOutputFile";
  // load image,  16-bit tif 
  FIBITMAP dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_TIFF, InFileName,FREE_IMAGE_LOAD_FLAGS.DEFAULT);         
  // save image
  FreeImage.SaveEx(
       ref dib,
       OutFileName, // FreeImage will add a file extension. NB: SaveEx will strip the file extension from OutFileName, and replace it with png, so even if OutFileName = "MyOutFile.jpg", SaveEx will save it here as MyOutFile.png"
       FREE_IMAGE_FORMAT.FIF_PNG,                               
       FREE_IMAGE_SAVE_FLAGS.DEFAULT,                      
       FREE_IMAGE_COLOR_DEPTH.FICD_04_BPP,                 
       true);
   FreeImage.UnloadEx(ref dib);
   }

このアプリケーションに興味があるのは tiff を開いてビットを操作することなので、特定の出力形式は必要ありません。この質問はこれで完了です。

読んでくれてありがとう、ダン

于 2013-04-30T20:50:21.143 に答える