使用FreeImage的负荷斗嘴(load tiff using FreeImage)

2019-10-18 01:56发布

我想这个代码的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。

许多感谢,丹

Answer 1:

据http://downloads.sourceforge.net/freeimage/FreeImage3170.pdf第117页,附录,支持的文件格式=>的FreeImage不支持16位PNG。

说明书https://en.wikipedia.org/wiki/Portable_Network_Graphics#Pixel_format允许16位灰度,而不阿尔法。 我从来没有见过一个...



Answer 2:

我犯了一个很大的进步通过使用与最新的分布Wraper文件夹加载和保存的例子:

FreeImage的\包装\ FreeImage.NET \ CS \样本\样品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和操纵位,让我完成了这个问题。

感谢您的阅读,丹



文章来源: load tiff using FreeImage