Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Unified Diff: include/images/SkImageDecoder.h

Issue 12604006: Upstream Android modifications to the image encoders/decoders. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: minor fixes Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/images/SkBitmapRegionDecoder.h ('k') | include/images/SkImageEncoder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/images/SkImageDecoder.h
diff --git a/include/images/SkImageDecoder.h b/include/images/SkImageDecoder.h
index 6d1bb7241d5dd3aeb44e584d02840de23e7eb678..8981b9542b96b6107469c5822320edc3ef71fef6 100644
--- a/include/images/SkImageDecoder.h
+++ b/include/images/SkImageDecoder.h
@@ -13,6 +13,7 @@
#include "SkBitmap.h"
#include "SkBitmapFactory.h"
#include "SkImage.h"
+#include "SkRect.h"
#include "SkRefCnt.h"
class SkStream;
@@ -25,6 +26,7 @@ class SkImageDecoder {
public:
virtual ~SkImageDecoder();
+ // Should be consistent with kFormatName
enum Format {
kUnknown_Format,
kBMP_Format,
@@ -33,14 +35,19 @@ public:
kJPEG_Format,
kPNG_Format,
kWBMP_Format,
+ kWEBP_Format,
- kLastKnownFormat = kWBMP_Format
+ kLastKnownFormat = kWEBP_Format
};
/** Return the compressed data's format (see Format enum)
*/
virtual Format getFormat() const;
+ /** Return the compressed data's format name.
+ */
+ const char* getFormatName() const;
+
/** Returns true if the decoder should try to dither the resulting image.
The default setting is true.
*/
@@ -51,6 +58,20 @@ public:
*/
void setDitherImage(bool dither) { fDitherImage = dither; }
+ /** Returns true if the decoder should try to decode the
+ resulting image to a higher quality even at the expense of
+ the decoding speed.
+ */
+ bool getPreferQualityOverSpeed() const { return fPreferQualityOverSpeed; }
+
+ /** Set to true if the the decoder should try to decode the
+ resulting image to a higher quality even at the expense of
+ the decoding speed.
+ */
+ void setPreferQualityOverSpeed(bool qualityOverSpeed) {
+ fPreferQualityOverSpeed = qualityOverSpeed;
+ }
+
/** \class Peeker
Base class for optional callbacks to retrieve meta/chunk data out of
@@ -175,11 +196,29 @@ public:
note: document use of Allocator, Peeker and Chooser
*/
- bool decode(SkStream*, SkBitmap* bitmap, SkBitmap::Config pref, Mode);
- bool decode(SkStream* stream, SkBitmap* bitmap, Mode mode) {
- return this->decode(stream, bitmap, SkBitmap::kNo_Config, mode);
+ bool decode(SkStream*, SkBitmap* bitmap, SkBitmap::Config pref, Mode, bool reuseBitmap = false);
+ bool decode(SkStream* stream, SkBitmap* bitmap, Mode mode, bool reuseBitmap = false) {
+ return this->decode(stream, bitmap, SkBitmap::kNo_Config, mode, reuseBitmap);
}
+ /**
+ * Given a stream, build an index for doing tile-based decode.
+ * The built index will be saved in the decoder, and the image size will
+ * be returned in width and height.
+ *
+ * Return true for success or false on failure.
+ */
+ bool buildTileIndex(SkStream*, int *width, int *height);
+
+ /**
+ * Decode a rectangle region in the image specified by rect.
+ * The method can only be called after buildTileIndex().
+ *
+ * Return true for success.
+ * Return false if the index is never built or failing in decoding.
+ */
+ bool decodeRegion(SkBitmap* bitmap, const SkIRect& rect, SkBitmap::Config pref);
+
/** Given a stream, this will try to find an appropriate decoder object.
If none is found, the method returns NULL.
*/
@@ -296,6 +335,38 @@ protected:
// must be overridden in subclasses. This guy is called by decode(...)
virtual bool onDecode(SkStream*, SkBitmap* bitmap, Mode) = 0;
+ // If the decoder wants to support tiled based decoding,
+ // this method must be overridden. This guy is called by buildTileIndex(...)
+ virtual bool onBuildTileIndex(SkStream*, int *width, int *height) {
+ return false;
+ }
+
+ // If the decoder wants to support tiled based decoding,
+ // this method must be overridden. This guy is called by decodeRegion(...)
+ virtual bool onDecodeRegion(SkBitmap* bitmap, const SkIRect& rect) {
+ return false;
+ }
+
+ /*
+ * Crop a rectangle from the src Bitmap to the dest Bitmap. src and dst are
+ * both sampled by sampleSize from an original Bitmap.
+ *
+ * @param dst the destination bitmap.
+ * @param src the source bitmap that is sampled by sampleSize from the
+ * original bitmap.
+ * @param sampleSize the sample size that src is sampled from the original bitmap.
+ * @param (dstX, dstY) the upper-left point of the dest bitmap in terms of
+ * the coordinate in the original bitmap.
+ * @param (width, height) the width and height of the unsampled dst.
+ * @param (srcX, srcY) the upper-left point of the src bitimap in terms of
+ * the coordinate in the original bitmap.
+ */
+ void cropBitmap(SkBitmap *dst, SkBitmap *src, int sampleSize,
+ int dstX, int dstY, int width, int height,
+ int srcX, int srcY);
+
+
+
/** Can be queried from within onDecode, to see if the user (possibly in
a different thread) has requested the decode to cancel. If this returns
true, your onDecode() should stop and return false.
@@ -346,6 +417,14 @@ private:
bool fDitherImage;
bool fUsePrefTable;
mutable bool fShouldCancelDecode;
+ bool fPreferQualityOverSpeed;
+
+ /** Contains the image format name.
+ * This should be consistent with Format.
+ *
+ * The format name gives a more meaningful error message than enum.
+ */
+ static const char* sFormatName[];
// illegal
SkImageDecoder(const SkImageDecoder&);
@@ -396,5 +475,6 @@ DECLARE_DECODER_CREATOR(ICOImageDecoder);
DECLARE_DECODER_CREATOR(JPEGImageDecoder);
DECLARE_DECODER_CREATOR(PNGImageDecoder);
DECLARE_DECODER_CREATOR(WBMPImageDecoder);
+DECLARE_DECODER_CREATOR(WEBPImageDecoder);
#endif
« no previous file with comments | « include/images/SkBitmapRegionDecoder.h ('k') | include/images/SkImageEncoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698