How to convert an image from .bmp to .png in c++ - c++

Is there any open source C++ library using which I can convert an image present in .bmp format to .png . I went through libpng didn't find any way to do it there, while boost/gil looks complex don't know that can be used to do this job.

Maybe this can help you solve the problem: LodePNG

I did not see BMP in boost/GIL.. maybe take a look at Magick++ ImageMagick API
http://www.imagemagick.org/Magick++/tutorial/Magick++_tutorial.pdf
Also GDK-Pixbuf can certainly do this

I use CImg for all my image manipulation. Well written, with good documentation.

Related

how to read images in HDF5 format using itk?

I need to read images in HDF5 format in my c++ code. I googled and it seems I can use ITK. Could you please let me know if there is such a possibility?
PS1. HDF5 images are in *.h5 format.
PS2. I'm using ITK to read images like png and jpg formats.
Thanks in advance,
I believe you can use ITK to read it. A good way to check whether your image file format is supported by the ITK's reader is to try opening your image using Slicer. If the file opens correctly, you are good to go.
If not, ITK might still read it as Slicer essentially only cares about 2D, scalar 3D and some special vector 3D cases.

C++ runtime convert gif to png

Although I have found a lot about converting PNG to GIF for various languages and platforms, interestingly there are very few things to convert GIF to PNG with C++. I am rendering GIF images by using mimeTeX and want to draw them to my PDF by using libharu. The problem is that neither mimeTeX can render PNG, nor libharu can draw GIF. I know really limited things about both formats (just some elementary things I read from official PNG website and Wikipedia) and thus cannot convert GIF to PNG. I am very sorry that I cannot show you what I have tried because I could not find a start point. Please also note that all images will be created at runtime. I can use any kind of library that will work on Windows 7; and since my code is already excessively complex, I really do not want to make it even more complex. If a simple trick exist for this specific job, it will be highly appreciated. Thanks for that.
ImageMagick is the way to go; there's even a C++ library: http://www.imagemagick.org/script/magick++.php

Saving frames in opencv without compression

I'm trying to use the imwrite() OpenCV function. I want to save the frames with the .TIFF extension. The problem that I have is that the saved images are compressed so I can't use them. Any idea how I can escape this compression?
thanks in advance
Do not mind what sietschie says. The TIFF flag is hardcoded in the opencv binaries with a LZW compression. You can just turn this off (comment it out) or change it.
In:
3rdparty/libtiff/tiff.h
Remove this line:
#define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */
Then compile. Presto.
Tiff options other than that are automatically set (8 bit, 16bit, color, rgb, rgba,etc) depending on your image
According to the documentation OpenCV only exposes a limited set of options for writing image files.
Non of which belongs to TIFF-Files.
So unless you want to use your own function or modify the OpenCV source, this is not possible.
I would suggest using another uncompressed format for saving the frames like PXM or BMP, unless you have some specific reasons to use TIFF-Files.
cv::imwrite("imagen.TIFF", bayer, {cv::IMWRITE_TIFF_COMPRESSION, 1,
cv::IMWRITE_TIFF_XDPI, 72,cv::IMWRITE_TIFF_YDPI,72});
The simplest way is recompiling OpenCV or direct using libtiff, but I consider as not very good idea changing 3rdparty/libtiff/tiff.h: after this modification you can't save compressed TIFFs at all with OpenCV, and under non-windows systems you usually have separate libtiff (not as a part of OpenCV).
I suggest simpler approach (still OpenCV recompilation, but you save possibility of writing compressed tiff and don't change libtiff directly):
saving uncompressed TIFFs with OpenCV

How can I read/write an image in C++ using just boost/standard library?

Is this possible? It doesn't matter what format the image is, but I have to be able to open it, read pixel data into some sort of array, create a new image using a modified set of pixel data.
Thanks!
Boost.GIL has a good video tutorial which shows you how to read/write and process raw image data in a very generic, yet efficient, way.
You need code to encode and decode the formats you want to support. You can do this yourself (not really ideal/practical,) you can embed encoding/decoding libraries (like libpng, for example,) or you can embed image libraries like DevIL.
Boost seems to include some sort of image access library known as Boost.GIL. I really don't know much about it, though.
I suggest the TARGA image format for your needs. You just read/write a few values in a header, then the rest is an uncompressed array of RGBA pixel data. You won't even need Boost!
I suggest CImg. This library is extremely easy to use. You only have to include a header file in your code and set some parameters when compiling and that's it! I've used CImg with MingW and GCC.

C function to convert a raw image to png

Is there any c function that allow me to convert a raw image to a PNG file?
Preferably, I don't need to pull in a big library for that.
Thank you.
I do not believe so. On the other hand, libpng isn't a huge library.
Have you tried the libpng library?
http://www.libpng.org/pub/png/libpng.html
I'm not sure what you mean by "raw image", but I've found LodePNG easy to work with. http://members.gamedev.net/lode/projects/LodePNG/ There's an example showing you how to encode some raw data to a png
See a related question: Convert bitmap to PNG in-memory in C++ (win32)
The short answer is that GDI+ can convert a bitmap image to PNG (with some limitations), so if you're on Windows it's an option that's even more minimal than libPNG.