ProjectPhysX / FluidX3D

The fastest and most memory efficient lattice Boltzmann CFD software, running on all GPUs via OpenCL. Free for non-commercial use.
https://youtube.com/@ProjectPhysX
Other
3.81k stars 301 forks source link

Transparent background in exported .png images #24

Closed ProjectPhysX closed 1 year ago

ProjectPhysX commented 1 year ago

How to get a transparent background in exported .png images?

ProjectPhysX commented 1 year ago

As-is, .png export only supports the 3-channel .png format in favor of smaller file size. But you can easily change that:

1) in src/defines.hpp, set GRAPHICS_BACKGROUND_COLOR to 0xFF000000 2) in src/utilities.hpp starting at line 4133, replace the entire write_png(...) function with this code:

inline void write_png(const string& filename, const Image* image) {
    create_folder(filename);
    uchar* data = new uchar[4u*image->length()];
    for(uint i=0u; i<image->length(); i++) {
        const int color = image->color(i);
        data[4u*i   ] = (color>>16)&255;
        data[4u*i+1u] = (color>> 8)&255;
        data[4u*i+2u] =  color     &255;
        data[4u*i+3u] = 255-((color>>24)&255);
    }
    lodepng::encode(create_file_extension(filename, ".png"), data, image->width(), image->height(), LCT_RGBA);
    delete[] data;
}