Unable to save to png..
devo_au

Hello,

Got a problem, When I call al_save_bitmap("something.bmp", myimage); it saves my image to a bmp file no problem. But when I try al_save_bitmap("something.png", myimage); I get a .png file with 0 bytes..

My code has al_init_image_addon() so I don't know why I cant save to .png. Would be nice if I could as .png is more memory efficient. Thanks

SiegeLord

What OS and Allegro version are you using?

devo_au

Allegro v 5.10
Windows 8 64

SiegeLord

That sounds like you've compiled it yourself. If so, try recompiling with cmake -DWANT_NATIVE_IMAGE_LOADER=off .. . This will turn off the native loaders and force Allegro to use libpng.

devo_au

Sorry my bad, im using 5.0.10. I didn't have to compile it, just put the files into the directories and off I went.

SiegeLord

Oh, nvm. Where did you get these binaries? I'm going to try to reproduce this.

EDIT: Trying things out with the MinGW 4.7 binaries from a.cc, this program works fine for me:

#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>

int main()
{
  al_init();
  al_init_image_addon();
  ALLEGRO_BITMAP* bmp = al_create_bitmap(256, 256);
  al_set_target_bitmap(bmp);
  al_clear_to_color(al_map_rgb_f(1, 0.2, 0.5));
  al_save_bitmap("test.png", bmp);
  return 0;
}

One last thing to try would be to link in the debug version and look at the allegro.log. In there, if Allegro is using the libpng backend, you should hopefully see some lines starting with "PNG error".

devo_au

Just tried your code with VC++ 2010 express in a new project.
It worked :/
It created the 256 x 256 magenta square png file..
Ran my original code again, with .png extention, still creates
0 byte png files. Checked allegro.log, all i found is relating to .png is
[ 24.22865] Failed loading help.png with .png handler.

SiegeLord

That's very puzzling... it seems that in your program you can't even load PNGs! Something's very wrong. I don't quite understand how the test program can work while your program doesn't though... are you linking to the same libraries and have the same DLLs in the same place? Clearly, al_init_image_addon does something, since that error message only comes up if it was at least partly successful (as it managed to register the .png handler).

Sorry about this... the debugability of the IO routines has always been a pain point.

How big is your project? Is it an option for you to share the source?

devo_au

Unfortunately I cant post the project, it is big and has a lot of art that isn't my own in it. I have been experimenting with it though. I pasted your code into the project and run it. It created a png file of the same dimensions but it had no color this time.. Don't know if that means anything.

I have tried to replicate the problem in another project, but your code works in perfectly every time so far. I'm stuffed if I know what's going on. Might just give up and go with the bmp output or maybe batch convert to png.

Thread #615231. Printed from Allegro.cc