39edf4cd94
skimage_main.cpp: More changes in the interest of testing our decoders. force_all_opaque before writing PNG files. Test reencoding the image to its original type (if possible), and then test redecoding it (to make sure the encoding was successful). Add an option to turn off this behavior. Merge decodeFileAndWrite with decodeFile. SkImageDecoder: Add kUnknown_Type to SkImageEncoder::Types. Add a static function to get the Format of an SkStream. In getFormatName(), remove an incorrect assert. When calling the flavor of DecodeStream that returns the Format, check the stream if the decoder returns kUnknown_Format. BUG=https://code.google.com/p/skia/issues/detail?id=1241 Review URL: https://codereview.chromium.org/14363003 git-svn-id: http://skia.googlecode.com/svn/trunk@8862 2bbb7eff-a529-9590-31e7-b0007b416f81
97 lines
2.8 KiB
C++
97 lines
2.8 KiB
C++
|
|
/*
|
|
* Copyright 2011 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
#ifndef SkImageEncoder_DEFINED
|
|
#define SkImageEncoder_DEFINED
|
|
|
|
#include "SkTypes.h"
|
|
|
|
class SkBitmap;
|
|
class SkWStream;
|
|
|
|
class SkImageEncoder {
|
|
public:
|
|
enum Type {
|
|
kUnknown_Type,
|
|
kBMP_Type,
|
|
kGIF_Type,
|
|
kICO_Type,
|
|
kJPEG_Type,
|
|
kPNG_Type,
|
|
kWBMP_Type,
|
|
kWEBP_Type,
|
|
};
|
|
static SkImageEncoder* Create(Type);
|
|
|
|
virtual ~SkImageEncoder();
|
|
|
|
/* Quality ranges from 0..100 */
|
|
enum {
|
|
kDefaultQuality = 80
|
|
};
|
|
|
|
/**
|
|
* Encode bitmap 'bm' in the desired format, writing results to
|
|
* file 'file', at quality level 'quality' (which can be in range
|
|
* 0-100).
|
|
*
|
|
* Calls the particular implementation's onEncode() method to
|
|
* actually do the encoding.
|
|
*/
|
|
bool encodeFile(const char file[], const SkBitmap& bm, int quality);
|
|
|
|
/**
|
|
* Encode bitmap 'bm' in the desired format, writing results to
|
|
* stream 'stream', at quality level 'quality' (which can be in
|
|
* range 0-100).
|
|
*
|
|
* Calls the particular implementation's onEncode() method to
|
|
* actually do the encoding.
|
|
*/
|
|
bool encodeStream(SkWStream* stream, const SkBitmap& bm, int quality);
|
|
|
|
static bool EncodeFile(const char file[], const SkBitmap&, Type,
|
|
int quality);
|
|
static bool EncodeStream(SkWStream*, const SkBitmap&, Type,
|
|
int quality);
|
|
|
|
protected:
|
|
/**
|
|
* Encode bitmap 'bm' in the desired format, writing results to
|
|
* stream 'stream', at quality level 'quality' (which can be in
|
|
* range 0-100).
|
|
*
|
|
* This must be overridden by each SkImageEncoder implementation.
|
|
*/
|
|
virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality) = 0;
|
|
};
|
|
|
|
// This macro declares a global (i.e., non-class owned) creation entry point
|
|
// for each encoder (e.g., CreateJPEGImageEncoder)
|
|
#define DECLARE_ENCODER_CREATOR(codec) \
|
|
SkImageEncoder *Create ## codec ();
|
|
|
|
// This macro defines the global creation entry point for each encoder. Each
|
|
// encoder implementation that registers with the encoder factory must call it.
|
|
#define DEFINE_ENCODER_CREATOR(codec) \
|
|
SkImageEncoder *Create ## codec () { \
|
|
return SkNEW( Sk ## codec ); \
|
|
}
|
|
|
|
// All the encoders known by Skia. Note that, depending on the compiler settings,
|
|
// not all of these will be available
|
|
/** An ARGBImageEncoder will always write out
|
|
* bitmap.width() * bitmap.height() * 4
|
|
* bytes.
|
|
*/
|
|
DECLARE_ENCODER_CREATOR(ARGBImageEncoder);
|
|
DECLARE_ENCODER_CREATOR(JPEGImageEncoder);
|
|
DECLARE_ENCODER_CREATOR(PNGImageEncoder);
|
|
DECLARE_ENCODER_CREATOR(WEBPImageEncoder);
|
|
|
|
#endif
|