diff options
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/SkImage_Codec.cpp | 67 | ||||
-rw-r--r-- | src/image/SkImage_Codec.h | 14 |
2 files changed, 81 insertions, 0 deletions
diff --git a/src/image/SkImage_Codec.cpp b/src/image/SkImage_Codec.cpp new file mode 100644 index 0000000000..af7e0db07e --- /dev/null +++ b/src/image/SkImage_Codec.cpp @@ -0,0 +1,67 @@ +/* + * 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 "SkImage_Base.h" +#include "SkBitmap.h" +#include "SkCanvas.h" +#include "SkData.h" +#include "../images/SkImageDecoder.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*) 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) { + if (!fBitmap.pixelRef()) { + if (!SkImageDecoder::DecodeMemory(fEncodedData->bytes(), fEncodedData->size(), + &fBitmap)) { + return; + } + } + canvas->drawBitmap(fBitmap, x, y, paint); +} + +/////////////////////////////////////////////////////////////////////////////// + +SkImage* SkImage::NewEncodedData(SkData* data) { + if (NULL == data) { + return NULL; + } + + SkBitmap bitmap; + if (!SkImageDecoder::DecodeMemory(data->bytes(), data->size(), &bitmap, + SkBitmap::kNo_Config, + SkImageDecoder::kDecodeBounds_Mode)) { + return NULL; + } + + return SkNEW_ARGS(SkImage_Codec, (data, bitmap.width(), bitmap.height())); +} + diff --git a/src/image/SkImage_Codec.h b/src/image/SkImage_Codec.h new file mode 100644 index 0000000000..1f77d4eeaa --- /dev/null +++ b/src/image/SkImage_Codec.h @@ -0,0 +1,14 @@ +// +// SkImage_Codec.h +// sfnt +// +// Created by Mike Reed on 7/30/12. +// +// + +#ifndef __sfnt__SkImage_Codec__ +#define __sfnt__SkImage_Codec__ + +#include <iostream> + +#endif /* defined(__sfnt__SkImage_Codec__) */ |