/** ******************************************************************************* * @file draw/Image.h * @brief draw Imaging system (header) * @author Edouard DUPIN * @date 21/08/2012 * @par Project * draw * * @par Copyright * Copyright 2011 Edouard DUPIN, all right reserved * * This software is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY. * * Licence summary : * You can modify and redistribute the sources code and binaries. * You can send me the bug-fix * * Term of the licence in in the file licence.txt. * ******************************************************************************* */ #ifndef __DRAW_IMAGE_H__ #define __DRAW_IMAGE_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BASIC_GRADIENT #ifndef BASIC_GRADIENT class Grid { public: std::vector2D m_size; std::vector m_data; int32_t m_outsideVal; int32_t m_errorVal; Grid(ivec2 _size) { m_size = _size; m_outsideVal = 20; m_errorVal = 0; // basic element : int32_t tmpPoint = 0; // preallocate data with a basic bg elements : m_data.resize(m_size.x()*m_size.y(), tmpPoint); }; ~Grid(void) { }; void setOutsideVal(int32_t _newVal) { m_outsideVal = _newVal; } void setErrorVal(int32_t _newVal) { m_errorVal = _newVal; } void setInide(std::vector2D _pos) { if( _pos.x()>=0 && _pos.x()=0 && _pos.y() _pos) { if( _pos.x()>=0 && _pos.x()=0 && _pos.y() _pos) { ; if( _pos.x()>0 && _pos.x()0 && _pos.y() _pos, int32_t _val) { if( _pos.x()>0 && _pos.x()0 && _pos.y() m_data; int32_t m_outsideVal; int32_t m_errorVal; Grid(ivec2 _size) { m_size = _size; m_outsideVal = 20; m_errorVal = 0; // basic element : ivec2 tmpPoint(0,0); // preallocate data with a basic bg elements : m_data.resize(m_size.x()*m_size.y(), tmpPoint); }; ~Grid(void) { }; void setOutsideVal(int32_t _newVal) { m_outsideVal = _newVal; } void setErrorVal(int32_t _newVal) { m_errorVal = _newVal; } void setInide(ivec2 _pos) { //if( pos.x>=0 && pos.x=0 && pos.y=0 && pos.x=0 && pos.y0 && _pos.x0 && _pos.y(m_errorVal,m_errorVal); }; void set(ivec2 _pos, ivec2 _val) { //if( pos.x>0 && pos.x0 && pos.y rendererBase_t; typedef agg::renderer_scanline_aa_solid rendererSolid_t; class Image { private: ivec2 m_size; std::vector m_data; agg::rendering_buffer * m_renderingBuffer; agg::pixfmt_rgba32 * m_pixFrame; rendererBase_t * m_renderBase; rendererSolid_t * m_renderArea; agg::rasterizer_scanline_aa<> m_rasterizer; //!< AGG renderer system agg::scanline_p8 m_scanLine; //!< // curent color for the system ... agg::rgba8 m_fillColor; agg::rgba8 m_strokeColor; float m_strokeSize; public: // constructor : Image(ivec2 size); Image(void); // destructor ~Image(void); // initialiser void init(void); // EWOL internal API for Texture system : public: void* getTextureDataPointer(void) { return &m_data[0]; }; // ----------------------------------------------- // -- basic tools : // ----------------------------------------------- public : void resize(ivec2 size); //void Resize(std::vector2D startPos, Vector2D size); ivec2 getSize(void) const { return m_size; }; int32_t getWidth(void) const { return m_size.x(); }; int32_t getHeight(void) const { return m_size.y(); }; //void Move(std::vector2D pos); //void Rotate(float angle); // radian //void Zoom(float coefficient); void clear(void) { for (int32_t iii=0; iii0 && pos.x()0 && pos.y()=0 && pos.x()=0 && pos.y() startPos, Vector2D size) const; //void setData(uint8_t *data, std::vector2D size); // ----------------------------------------------- // -- drawing tools : // ----------------------------------------------- public : void begin(void); void end(void); void setFillColor(draw::Color newColor) { m_fillColor = newColor; } void setStrokeColor(draw::Color newColor) { m_strokeColor = newColor; } void setStrokeSize(float thickness) { m_strokeSize = thickness; } void moveTo(vec2 pos); void moveToAbs(vec2 pos); void lineTo(vec2 pos); void lineToAbs(vec2 pos); void join(void); void draw(void); void line(vec2 posStart, vec2 posEnd); void dot(vec2 pos); void rectangle(vec2 pos, vec2 size); void circle(vec2 pos, float radius, float angleStart=0, float angleStop=2*M_PI); void disc(vec2 pos, float radius, float angleStart=0, float angleStop=2*M_PI); // generate the distant field from the alpha value of the Image void distanceField(void); void distanceField(ivec2 pos, ivec2 size, int32_t upscaler=1, int32_t startPos=0); void saveFile(const char * file) {}; private: }; }; #endif