X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftags%2Fstable%2Fsrc%2Fmodules%2Fmod_png%2Ftrgt_png.cpp;fp=synfig-core%2Ftags%2Fstable%2Fsrc%2Fmodules%2Fmod_png%2Ftrgt_png.cpp;h=0000000000000000000000000000000000000000;hb=c5bd5e71f365fe9d1aa42b844f403d3ffc408bec;hp=279ea5668da42a8ff865d4d616bcc5d5f166f6a6;hpb=842d1c156ee50dc0045a0b0272d090c01965b2f0;p=synfig.git diff --git a/synfig-core/tags/stable/src/modules/mod_png/trgt_png.cpp b/synfig-core/tags/stable/src/modules/mod_png/trgt_png.cpp deleted file mode 100644 index 279ea56..0000000 --- a/synfig-core/tags/stable/src/modules/mod_png/trgt_png.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/*! ======================================================================== -** Sinfg -** png_trgt Target Module -** $Id: trgt_png.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $ -** -** Copyright (c) 2002 Robert B. Quattlebaum Jr. -** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. -** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. -** -** === N O T E S =========================================================== -** -** ========================================================================= */ - -/* === H E A D E R S ======================================================= */ - -#define SINFG_TARGET - -#ifdef USING_PCH -# include "pch.h" -#else -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "trgt_png.h" -#include -#include -#include -#include -#include -#include - -#endif - -/* === M A C R O S ========================================================= */ - -using namespace sinfg; -using namespace std; -using namespace etl; - -/* === G L O B A L S ======================================================= */ - -SINFG_TARGET_INIT(png_trgt); -SINFG_TARGET_SET_NAME(png_trgt,"png"); -SINFG_TARGET_SET_EXT(png_trgt,"png"); -SINFG_TARGET_SET_VERSION(png_trgt,"0.1"); -SINFG_TARGET_SET_CVS_ID(png_trgt,"$Id: trgt_png.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $"); - -/* === M E T H O D S ======================================================= */ - -void -png_trgt::png_out_error(png_struct *png_data,const char *msg) -{ - png_trgt *me=(png_trgt*)png_data->error_ptr; - sinfg::error(strprintf("png_trgt: error: %s",msg)); - me->ready=false; -} - -void -png_trgt::png_out_warning(png_struct *png_data,const char *msg) -{ - png_trgt *me=(png_trgt*)png_data->error_ptr; - sinfg::warning(strprintf("png_trgt: warning: %s",msg)); - me->ready=false; -} - - -//Target *png_trgt::New(const char *filename){ return new png_trgt(filename);} - -png_trgt::png_trgt(const char *Filename) -{ - file=NULL; - filename=Filename; - buffer=NULL; - ready=false; - color_buffer=0; -} - -png_trgt::~png_trgt() -{ - if(file) - fclose(file); - file=NULL; - delete [] buffer; - delete [] color_buffer; -} - -bool -png_trgt::set_rend_desc(RendDesc *given_desc) -{ - //given_desc->set_pixel_format(PixelFormat((int)PF_RGB|(int)PF_A)); - desc=*given_desc; - imagecount=desc.get_frame_start(); - if(desc.get_frame_end()-desc.get_frame_start()>0) - multi_image=true; - else - multi_image=false; - return true; -} - -void -png_trgt::end_frame() -{ - if(ready && file) - { - png_write_end(png_ptr,info_ptr); - png_destroy_write_struct(&png_ptr, &info_ptr); - } - - if(file && file!=stdout) - fclose(file); - file=NULL; - imagecount++; - ready=false; -} - -bool -png_trgt::start_frame(sinfg::ProgressCallback *callback) -{ - int w=desc.get_w(),h=desc.get_h(); - - if(file && file!=stdout) - fclose(file); - if(filename=="-") - { - if(callback)callback->task(strprintf("(stdout) %d",imagecount).c_str()); - file=stdout; - } - else if(multi_image) - { - String - newfilename(filename), - ext(find(filename.begin(),filename.end(),'.'),filename.end()); - newfilename.erase(find(newfilename.begin(),newfilename.end(),'.'),newfilename.end()); - - newfilename+=etl::strprintf("%04d",imagecount)+ext; - file=fopen(newfilename.c_str(),"wb"); - if(callback)callback->task(newfilename); - } - else - { - file=fopen(filename.c_str(),"wb"); - if(callback)callback->task(filename); - } - - if(!file) - return false; - - delete [] buffer; - buffer=new unsigned char[4*w]; - - delete [] color_buffer; - color_buffer=new Color[w]; - - png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)this,png_out_error, png_out_warning); - if (!png_ptr) - { - sinfg::error("Unable to setup PNG struct"); - fclose(file); - return false; - } - - info_ptr= png_create_info_struct(png_ptr); - if (!info_ptr) - { - sinfg::error("Unable to setup PNG info struct"); - fclose(file); - png_destroy_write_struct(&png_ptr,(png_infopp)NULL); - return false; - } - - if (setjmp(png_jmpbuf(png_ptr))) - { - sinfg::error("Unable to setup longjump"); - png_destroy_write_struct(&png_ptr, &info_ptr); - fclose(file); - return false; - } - png_init_io(png_ptr,file); - png_set_filter(png_ptr,0,PNG_FILTER_NONE); - - setjmp(png_jmpbuf(png_ptr)); - png_set_IHDR(png_ptr,info_ptr,w,h,8,PNG_COLOR_TYPE_RGBA,PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT); - - // Write the gamma - //png_set_gAMA(png_ptr, info_ptr,1.0/gamma().get_gamma()); - png_set_gAMA(png_ptr, info_ptr,gamma().get_gamma()); - - // Write the physical size - png_set_pHYs(png_ptr,info_ptr,round_to_int(desc.get_x_res()),round_to_int(desc.get_y_res()),PNG_RESOLUTION_METER); - - // Output any text info along with the file - png_text comments[]= - { - { PNG_TEXT_COMPRESSION_NONE, "Title", const_cast(get_canvas()->get_name().c_str()) }, - { PNG_TEXT_COMPRESSION_NONE, "Description", const_cast(get_canvas()->get_description().c_str()) }, - { PNG_TEXT_COMPRESSION_NONE, "Copyright", "(c) 2004 Voria Studios, LLC" }, - { PNG_TEXT_COMPRESSION_NONE, "Software", "SINFG" }, - }; - png_set_text(png_ptr,info_ptr,comments,sizeof(comments)/sizeof(png_text)); - - png_write_info_before_PLTE(png_ptr, info_ptr); - png_write_info(png_ptr, info_ptr); - ready=true; - return true; -} - -Color * -png_trgt::start_scanline(int scanline) -{ - return color_buffer; -} - -bool -png_trgt::end_scanline() -{ - if(!file || !ready) - return false; - - convert_color_format(buffer, color_buffer, desc.get_w(), PF_RGB|PF_A, gamma()); - - setjmp(png_jmpbuf(png_ptr)); - png_write_row(png_ptr,buffer); - - return true; -}