00001
00002 #ifndef INCLUDED_PNGGenerator_h_
00003 #define INCLUDED_PNGGenerator_h_
00004
00005 #include "Vision/FilterBankGenerator.h"
00006 #include <png.h>
00007
00008 extern "C" {
00009 void user_write_png_data(png_structp png_ptr, png_bytep data, png_size_t length);
00010 }
00011
00012
00013
00014
00015
00016
00017
00018
00019 class PNGGenerator : public FilterBankGenerator {
00020 public:
00021 static const unsigned int PNG_HEADER_PAD=500;
00022
00023
00024 enum src_mode_t {
00025 SRC_AUTO,
00026 SRC_GRAYSCALE,
00027 SRC_COLOR
00028 };
00029
00030
00031 PNGGenerator(unsigned int mysid, FilterBankGenerator* fbg, EventBase::EventTypeID_t tid);
00032
00033 PNGGenerator(unsigned int mysid, PNGGenerator::src_mode_t sMode, FilterBankGenerator* fbg, EventBase::EventTypeID_t tid);
00034
00035
00036 virtual ~PNGGenerator();
00037
00038
00039 virtual void setSourceMode(src_mode_t mode) { srcMode=mode; if(mode!=SRC_AUTO) curMode=mode;}
00040
00041 virtual src_mode_t getSourceMode() const { return srcMode; }
00042
00043 virtual src_mode_t getCurrentSourceFormat() const { return curMode; }
00044
00045 static std::string getClassDescription() { return "Compresses its source FilterBankGenerator's data into PNG format"; }
00046
00047
00048 virtual void processEvent(const EventBase& event);
00049
00050
00051 virtual unsigned int getBinSize() const;
00052
00053 virtual unsigned int loadBuffer(const char buf[], unsigned int len);
00054
00055
00056 virtual unsigned int saveBuffer(char buf[], unsigned int len) const;
00057
00058
00059 virtual unsigned int getImageSize(unsigned int layer, unsigned int chan) const { return bytesUsed[layer][chan]; }
00060
00061 protected:
00062 virtual void setNumImages(unsigned int nLayers, unsigned int nChannels);
00063 virtual unsigned char * createImageCache(unsigned int layer, unsigned int chan) const;
00064 virtual void calcImage(unsigned int layer, unsigned int chan);
00065 virtual void destruct();
00066
00067 src_mode_t srcMode;
00068 src_mode_t curMode;
00069
00070 unsigned int ** bytesUsed;
00071
00072 private:
00073 PNGGenerator(const PNGGenerator& fbk);
00074 const PNGGenerator& operator=(const PNGGenerator& fbk);
00075 };
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 #endif