1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
/*
* Copyright (C) 2006 - 2015 René Rebe
* (C) 2006, 2007 Archivista GmbH, CH-8042 Zuerich
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2. A copy of the GNU General
* Public License can be found in the file LICENSE.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANT-
* ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* Alternatively, commercial licensing options are available from the
* copyright holder ExactCODE GmbH Germany.
*/
extern "C" {
#include <jpeglib.h>
#include <jerror.h>
#include "transupp.h"
}
#include <sstream>
#include "Codecs.hh"
class JPEGCodec : public ImageCodec {
public:
JPEGCodec () {
registerCodec ("jpeg", this);
registerCodec ("jpg", this);
};
// freestanding
JPEGCodec (Image* _image);
virtual std::string getID () { return "JPEG"; };
virtual int readImage (std::istream* stream, Image& image, const std::string& decompress);
virtual bool writeImage (std::ostream* stream, Image& image,
int quality, const std::string& compress);
// on-demand decoding
virtual /*bool*/ void decodeNow (Image* image);
// optional optimizing and/or lossless implementations
virtual bool flipX (Image& image);
virtual bool flipY (Image& image);
virtual bool rotate (Image& image, double angle);
virtual bool crop (Image& image, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
virtual bool toGray (Image& image);
virtual bool scale (Image& image, double xscale, double yscale, bool fixed);
private:
void parseExif (Image& image);
void decodeNow (Image* image, int factor);
// internals and helper
bool readMeta (std::istream* stream, Image& image);
bool doTransform (JXFORM_CODE code, Image& image,
std::ostream* stream = 0, bool to_gray = false, bool crop = false,
unsigned int x = 0, unsigned int y = 0, unsigned int w = 0, unsigned int h = 0);
int colorspace; // maybe just store the decompress string?
std::stringstream private_copy;
};
|