/* This file is part of ksquirrel-libs (http://ksquirrel.sf.net) Copyright (c) 2005 Dmitry Baryshev 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; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef KSQUIRREL_LIBS_DEFS_H #define KSQUIRREL_LIBS_DEFS_H #include #include #include struct codec_options { std::string version, name, filter, mime, mimetype, config; void *pixmap; bool readable, canbemultiple, writestatic, writeanimated, needtempfile; }; /* Metainfo support */ struct fmt_metaentry { std::string group; std::string data; }; /* RGBA and RGB pixels */ struct RGBA { RGBA() : r(0), g(0), b(0), a(0) {} RGBA(s32 r1, s32 g1, s32 b1, s32 a1) : r(r1), g(g1), b(b1), a(a1) {} u8 r; u8 g; u8 b; u8 a; }PACKED; struct RGB { RGB() : r(0), g(0), b(0) {} RGB(s32 r1, s32 g1, s32 b1) : r(r1), g(g1), b(b1) {} u8 r; u8 g; u8 b; }PACKED; /* Image decription */ struct fmt_image { fmt_image() : w(0), h(0), bpp(0), hasalpha(false), needflip(false), delay(0), interlaced(false), passes(1) {} // width and height s32 w; s32 h; // bit depth s32 bpp; // has alpha channel ? bool hasalpha; // need to be flipped ? bool needflip; // if it's a frame in animated sequence, // 'delay' will define a delay time s32 delay; // interlaced or normal ? bool interlaced; // if interlaced, 'passes' stores the number // of passes. if no, passes should be 1 s32 passes; // some useful info about image. // this is a replacement for 'dump' in older versions of ksquirrel-libs // -------------------------------------------------------------------- // color space (RGB, RGBA, CMYK, LAB ...) std::string colorspace; // compression type (RLE, JPEG, Deflate ...) std::string compression; // palette types enum fmt_palette { monochrome = 1, indexed4 = 2, indexed8 = 4, indexed15 = 8, indexed16 = 16, pure24 = 32, pure32 = 64, internal = 128 }; // palette, if exists std::vector palette; }; /* General description */ struct fmt_info { fmt_info() : animated(false) {} /* * TODO: make 'image' and 'meta' implicitly shared ? */ // array of images std::vector image; // array of metainfo entries std::vector meta; // animated or static bool animated; }; /* Internal cmpression. E.g. compression_level will be passed to internal routines, No compression RLE compression for ex. in libjpeg, libpng. */ enum fmt_compression { CompressionNo = 1, CompressionRLE = 2, CompressionInternal = 4 }; /* Note: if the image can be compressed with RLE encoding and with only RLE encoding, compression_scheme should be CompressionInternal */ /* Write options for image format */ struct fmt_writeoptionsabs { // can be interlaced ? bool interlaced; // if interlaced, this value should store preferred number of passes. s32 passes; // if the image should be flipped before writing bool needflip; // with which compression it can be encoded ? // for example: CompressionNo | CompressionRLE. // it means, that image can be encoded with RLE // method or can be saved uncompressed. s32 compression_scheme; // minimum compression level, maximum and default // For example, JPEG library has minimum = 0, // maximum = 100 and default = 25. s32 compression_min, compression_max, compression_def; // with which bit depth it can be encoded ? // 1 means support of this bit depth, // and 0 otherwise. This param cann't be null. // // bits 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | // bit depth 32 24 16 15 8 4 1 u8 palette_flags; }PACKED; /* this information will be passed to writing function */ struct fmt_writeoptions { // write interlaced image or normal ? bool interlaced; // with which compression encode the image ? fmt_compression compression_scheme; // compression level s32 compression_level; // has alpha channel ? // If no, A channel in RGBA image will be ignored bool alpha; s32 bitdepth; }PACKED; #if defined SQ_NEED_OPERATOR_RGBA_RGBA static s32 operator== (const RGBA &rgba1, const RGBA &rgba2) { return (rgba1.r == rgba2.r && rgba1.g == rgba2.g && rgba1.b == rgba2.b && rgba1.a == rgba2.a); } #endif #if defined SQ_NEED_OPERATOR_RGB_RGBA static s32 operator== (const RGB &rgb, const RGBA &rgba) { return (rgb.r == rgba.r && rgb.g == rgba.g && rgb.b == rgba.b); } #endif #if defined SQ_NEED_OPERATOR_RGBA_RGB static s32 operator== (const RGBA &rgba, const RGB &rgb) { return (rgba.r == rgb.r && rgba.g == rgb.g && rgba.b == rgb.b); } #endif #endif