Page 1 of 1

ImageMagick and usage in c++ application Question

Posted: 2017-04-15T02:59:10-07:00
by Vlnka
Hello

I found ImageMagick when I searched for some graphic library for c++. I was read IM page but I still can't get if IM is right for me. There are my questions:

1. Can I use IM for display and create graphics inside my c++ application? I want it for UI and maybe for all other graphics, like create, paint and etc..
I am learning SDL2 and want use IM for graphics.

2. Can IM manipulate svg images? Like change color for shapes or change effect, like blur or shadow.

3. The license looks like I can use it for commercial product. But it is not clear to me, if I decide use IM for my commercial product, can I link IM as statick library and I don't need show my code, if someone ask for it?

Thanks.

Re: ImageMagick and usage in c++ application Question

Posted: 2017-04-15T03:51:42-07:00
by snibgo
1. IM contains code to create and manipulate raster images. It contains virtually no code to display those images on screens, or other user-interface facilities.

2. IM can convert SVG to raster, then manipulate the raster image to blur or shadow etc. But it doesn't modify the SVG.

3. As far as I understand the IM licence http://www.imagemagick.org/script/license.php, nothing in there requires you to show your source code to anyone, even if that source code is derived from IM. (However, if you contribute your source code to IM, it will be publically available. I don't suppose this applies to you.)

Re: ImageMagick and usage in c++ application Question

Posted: 2017-04-16T07:33:30-07:00
by Vlnka
Sorry for late answer.

1. Thanks, I am aware of this, but I want instead write image as file, either write image in to memory or send pixels in to SDL_Surface and then display it on my application. It is possible with this way?
I tried this, but without success. I am still learning SDL and I was able to display something, but it is mess of pixels and program crashing.

Re: ImageMagick and usage in c++ application Question

Posted: 2017-04-16T08:04:24-07:00
by snibgo
IM can write an image as a file, as PNG or TIFF or JPEG or many other formats.

I know nothing about SDL. From https://wiki.libsdl.org/SDL_Surface , SDL_Surface is a simple format. It seems easy to loop through y and x: read an IM image pixel, use data from the https://wiki.libsdl.org/SDL_PixelFormat structure to do any required type conversion, and set the array element of the "pixels" structure.

If the IM and SDL pixel data types correspond (eg Uint16, RGB channels, in the same order), you might be able to memcpy() from IM to SDL.

Even better, perhaps you can simply set SDL's void* pointer to point at IM's data.