diff options
author | halcanary <halcanary@google.com> | 2014-08-12 06:53:28 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-12 06:53:28 -0700 |
commit | b2edec2c396f9be3e527179bd0e5c866b59ae795 (patch) | |
tree | 9ca1aa4e421c4b15815d130d31c88d02c4438aa1 /src | |
parent | d7127e7b835b4c5d4767ee9d8794e9865c81f1ac (diff) |
Revert of SkImage_Codec is Lazy (https://codereview.chromium.org/460823002/)
Reason for revert:
breaks chromium - no SkDecodingImageGenerator::Create
Original issue's description:
> SkImage_Codec is Lazy
>
> Committed: https://skia.googlesource.com/skia/+/e36f499110da8c2e2aa05227bee6deb967309ead
R=reed@google.com
TBR=reed@google.com
NOTREECHECKS=true
NOTRY=true
Author: halcanary@google.com
Review URL: https://codereview.chromium.org/461043002
Diffstat (limited to 'src')
-rw-r--r-- | src/image/SkImage_Codec.cpp | 80 | ||||
-rw-r--r-- | src/image/SkImage_Raster.cpp | 19 |
2 files changed, 80 insertions, 19 deletions
diff --git a/src/image/SkImage_Codec.cpp b/src/image/SkImage_Codec.cpp new file mode 100644 index 0000000000..21c844d01d --- /dev/null +++ b/src/image/SkImage_Codec.cpp @@ -0,0 +1,80 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkImageDecoder.h" +#include "SkImage_Base.h" +#include "SkBitmap.h" +#include "SkCanvas.h" +#include "SkData.h" + +class SkImage_Codec : public SkImage_Base { +public: + static SkImage* NewEmpty(); + + SkImage_Codec(SkData* encodedData, int width, int height); + virtual ~SkImage_Codec(); + + virtual void onDraw(SkCanvas*, SkScalar, SkScalar, const SkPaint*) const SK_OVERRIDE; + virtual void onDrawRectToRect(SkCanvas*, const SkRect*, const SkRect&, + const SkPaint*) const SK_OVERRIDE; + +private: + SkData* fEncodedData; + SkBitmap fBitmap; + + typedef SkImage_Base INHERITED; +}; + +/////////////////////////////////////////////////////////////////////////////// + +SkImage_Codec::SkImage_Codec(SkData* data, int width, int height) : INHERITED(width, height) { + fEncodedData = data; + fEncodedData->ref(); +} + +SkImage_Codec::~SkImage_Codec() { + fEncodedData->unref(); +} + +void SkImage_Codec::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const { + if (!fBitmap.pixelRef()) { + // todo: this needs to be thread-safe + SkBitmap* bitmap = const_cast<SkBitmap*>(&fBitmap); + if (!SkImageDecoder::DecodeMemory(fEncodedData->bytes(), fEncodedData->size(), bitmap)) { + return; + } + } + canvas->drawBitmap(fBitmap, x, y, paint); +} + +void SkImage_Codec::onDrawRectToRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst, + const SkPaint* paint) const { + if (!fBitmap.pixelRef()) { + // todo: this needs to be thread-safe + SkBitmap* bitmap = const_cast<SkBitmap*>(&fBitmap); + if (!SkImageDecoder::DecodeMemory(fEncodedData->bytes(), fEncodedData->size(), bitmap)) { + return; + } + } + canvas->drawBitmapRectToRect(fBitmap, src, dst, paint); +} + +/////////////////////////////////////////////////////////////////////////////// + +SkImage* SkImage::NewEncodedData(SkData* data) { + if (NULL == data) { + return NULL; + } + + SkBitmap bitmap; + if (!SkImageDecoder::DecodeMemory(data->bytes(), data->size(), &bitmap, kUnknown_SkColorType, + SkImageDecoder::kDecodeBounds_Mode)) { + return NULL; + } + + return SkNEW_ARGS(SkImage_Codec, (data, bitmap.width(), bitmap.height())); +} diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index 4841dae25c..e4768af0ac 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -10,7 +10,6 @@ #include "SkBitmap.h" #include "SkCanvas.h" #include "SkData.h" -#include "SkDecodingImageGenerator.h" #include "SkMallocPixelRef.h" class SkImage_Raster : public SkImage_Base { @@ -70,10 +69,6 @@ public: SkShader::TileMode, const SkMatrix* localMatrix) const SK_OVERRIDE; - SkImage_Raster(const SkBitmap& bitmap) - :INHERITED(bitmap.width(), bitmap.height()) - , fBitmap(bitmap) { } - private: SkImage_Raster() : INHERITED(0, 0) {} @@ -211,17 +206,3 @@ SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr, SkPixelRef* SkBitmapImageGetPixelRef(SkImage* image) { return ((SkImage_Raster*)image)->getPixelRef(); } - -SkImage* SkImage::NewEncodedData(SkData* data) { - if (NULL == data) { - return NULL; - } - SkBitmap bitmap; - if (!SkInstallDiscardablePixelRef( - SkDecodingImageGenerator::Create( - data, SkDecodingImageGenerator::Options()), - &bitmap)) { - return NULL; - } - return SkNEW_ARGS(SkImage_Raster, (bitmap)); -} |