Hello, I have been using FreeImage for VB6 (with the wrapper for VB6) for some time now to convert various images (GIF, JPEG, BMP, etc.) to TIF images with CCITG4 compression at 1bpp. The resulting images need to be 1bpp (black and white) for the app they are going into. This process has been working and the resulting TIF looks ok - mostly a white background with black text or images.
However, recently I moved my code to C# and am doing the same process, but the resulting TIF images have the black and white inverted. Basically I'm getting black background images with white letters and images. I noticed that the SaveEx function in the VB6 code might be doing some things a little differently regarding colordepth compared to the SaveEx in the C# library, but I'm not sure what to do. Here is my old simple VB6 example code (converting a comic strip I simply saved off Google as a GIF image file):
Dim dib As Long
Dim bOK As Long
' Load a gif image
dib = FreeImage_Load(FIF_GIF, "C:\Temp\Pickles.gif", 0)
' Save this image as TIF
bOK = FreeImage_SaveEx(dib, "C:\Temp\Out.tif", FIF_TIFF, FISO_TIFF_CCITTFAX4, FICD_1BPP)
' Unload the dib
The resulting image looks ok - white background with black text/images. Now here is the same code in C# code:
FIBITMAP dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_GIF, @"C:\Temp\pickles.gif", FREE_IMAGE_LOAD_FLAGS.DEFAULT);
FreeImage.SaveEx(ref dib, @"C:\Temp\out.tif", FREE_IMAGE_FORMAT.FIF_TIFF, FREE_IMAGE_SAVE_FLAGS.TIFF_CCITTFAX4, FREE_IMAGE_COLOR_DEPTH.FICD_01_BPP, false);
// unload bitmap
This works, but the black and white are reversed. How can I change/fix this? Any example code and help would be greatly appreciated! Thank you for your time.
I'm currently using VS2010 on Win7 Ultimate x64. FreeImage DLL v3.15.4 and I used the build.bat file to create the FreeImageNET.dll which I referenced into my project.
try to OR the color depth constant FICD_01_BPP with the FICD_FORCE_GREYSCALE when calling SaveEx. So, call SaveEx with
FREE_IMAGE_COLOR_DEPTH.FICD_01_BPP | FREE_IMAGE_COLOR_DEPTH.FICD_FORCE_GREYSCALE
as the fifth argument.
** UPDATE - Even though the image looks fine now when forcing to greyscale (and opened in the windows image viewer), when it gets imported into our imaging system, the black & white get inverted back. I inspected the TIF header for a TIF that works in our system and it shows that Photometric Interpretation is 0 is white. Any ideas how to switch the photometric value?
Thank you Carsten! I just got around to trying this and it worked! However, the image background, that I was expecting to be solid white, was grainy (but not solid black anymore). I ended up changing the call from using FICD_01_BPP to FICD_01_BPP THRESHOLD as follows:
FREE_IMAGE_COLOR_DEPTH.FICD_01_BPP_THRESHOLD | FREE_IMAGE_COLOR_DEPTH.FICD_FORCE_GREYSCALE
and that worked (showing just black and white). I have a question regarding this FICD_01_BPP_THRESHOLD - I have seen a MINISBLACK or MINISWHITE property value somewhere before. Is this how the THRESHOLD is determined here? Just curious to know if I need or should set that somewhere first before making the SaveEx call.
(The reason I'm having to use this 1bpp fax format is the application these images go into is very old and it's what it supports). :(
Thank you again for your time and help! I really appreciate it.
Sign up for the SourceForge newsletter:
You seem to have CSS turned off.
Please don't fill out this field.