⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fimage.h

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 H
字号:
/* -*-C++-*-    "$Id: FImage.H,v 1.1.1.1 2003/08/07 21:18:37 jasonk Exp $"      Copyright 1999-2000 by the Flek development team.      This library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public   License as published by the Free Software Foundation; either   version 2 of the License, or (at your option) any later version.      This library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.      You should have received a copy of the GNU Library General Public   License along with this library; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307   USA.      Please report all bugs and problems to "flek-devel@sourceforge.net".*/#ifndef _FIMAGE_H_#define _FIMAGE_H_typedef unsigned char uchar;class FImage;class FImageIterator { private:    friend class FImage;  FImageIterator (uchar *p, int c=4) : ptr (p), channels (c) { } public:  FImageIterator () : ptr (0), channels (4) { }  bool operator == (FImageIterator &p) const { return (ptr == p.ptr); }  bool operator != (FImageIterator &p) const { return (ptr != p.ptr); }  FImageIterator operator++ ()     {       ptr += channels;      return *this;    }  FImageIterator operator++ (int)    {      FImageIterator tmp = *this;      ptr += channels;      return tmp;    }  FImageIterator operator-- ()    {      ptr -= channels;      return *this;    }  FImageIterator operator-- (int)    {      FImageIterator tmp = *this;      ptr -= channels;      return tmp;    }  FImageIterator& operator = (const FImageIterator &p)    {      ptr = p.ptr;      return *this;    }  uchar* operator* () { return ptr; } protected:    uchar *ptr;  int channels;};/** @package libflek_core * FImage provides four 8 bit channels (Red, Green, Blue and Alpha). * The image is stored internally as an array of unsigned chars in * RGBA order.  The internal representation can be used directly by * OpenGL with the GL_RGBA format and the GL_UNSIGNED_BYTE type. */class FImage{   public:  typedef FImageIterator iterator;  /**   * The default constructor does not allocate any space for the image.   */  FImage ();  /**   * This constructor allocated W*H pixels for storing the image.   */  FImage (int w, int h, int channels=4);  /**   * The copy constructor.   */  FImage (FImage *src);    /**    * The destructor deallocated any allocated memory.   */  ~FImage ();  //void width (int i) { W = i; }  //void height (int i) { H = i; }  /**   * Gets the width of the image.   */  int width () { return W; }  /**   * Gets the height of the image.   */  int height () { return H; }  /**   * Gets the number of channels.   */  int channels () { return Channels; }  /**    * A really bad scale function.   */  FImage* scale (int w, int h);  void flip_vertical ();    /**    * Clear the image to a certain color.   */  void clear (uchar r=0, uchar g=0, uchar b=0, uchar a=0);    /**   * Sets the number of channels.  Crops or expands the number of channels.   */  void channels (int c);    /**   * Return an iterator connected to the first pixel on row r of the image.   */  iterator begin (int r) { return iterator (Data+Channels*W*r, Channels); }  /**   * Return an iterator connected to the first pixel in the image.   */  iterator begin () { return iterator (Data, Channels); }  /**   * Return an iterator connected to the last+1 pixel on row r of the image.   */  iterator end (int r) { return iterator (Data+(Channels*W*(r+1)), Channels); }  /**   * Return an iterator connected to the last+1 pixel in the image.   */  iterator end () { return iterator (Data+(W*H*Channels), Channels); }  /**   * Return an iterator connected to position x, y.   */  iterator operator() (int x, int y) { return iterator (Data+((W*y)+x)*Channels, Channels); }  FImage& operator = (const FImage &p) {    delete [] Data;    W = p.W;    H = p.H;    Channels = p.Channels;    Data = new uchar [W*H*Channels];    for (int i=0; i<W*H*Channels; i++) {      Data[i] = p.Data[i];    }    return *this;  }   protected:  uchar *Data;  int W;  int H;  int Channels;};/** * Composite image B "over" image A in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* composite (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Composite src "over" dest, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void composite (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Add image B to image A in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* add (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Add src to dest, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void add (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Subtract image B from image A in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* subtract (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Subtract src from dest, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void subtract (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Create a difference from images A and B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* difference (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * The difference of src and dest, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void difference (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Lighten image A from Image B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* lighten_only (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Use the maximum (lightest) value of src and dest, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void lighten_only (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Darken image A from Image B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* darken_only (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Use the minimum (darkest) value of src and dest, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void darken_only (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Divide image A by Image B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* divide (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Divide dest by src, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void divide (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Multiply image A by Image B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* multiply (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Multiply dest by src, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void multiply (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Screen image A by Image B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* screen (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Screen dest by src, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void screen (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);/** * Overlay image A by Image B in place.  Image B can be offset by xo, yo.  * And the operation may have an opacity o. */FImage* overlay (FImage *A, FImage *B, int xo=0, int yo=0, float o=1.0);/** * Overlay dest by src, where src and dest are an array of unsigned * chars in RGBA order.  opacity is an integer value from 0-255 that  * gives the src frame an overall opacity/transparency.  length is the * number of RGBA pixels to perform this operation on. */void overlay (unsigned char* dest, const unsigned char* src, int opacity, int length, int dest_channels, int src_channels);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -