Index: src/images/SkDecodingImageGenerator.cpp |
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..65fa6fd5612abfec9f803943a7fe1e4ab0540c18 |
--- /dev/null |
+++ b/src/images/SkDecodingImageGenerator.cpp |
@@ -0,0 +1,52 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkDecodingImageGenerator.h" |
+ |
+#include "SkBitmapFactory.h" |
+#include "SkData.h" |
+#include "SkDiscardablePixelRef.h" |
+#include "SkImageDecoder.h" |
+ |
+SkDecodingImageGenerator::SkDecodingImageGenerator(SkData* data) |
+ : fData(data) { |
+ SkASSERT(fData != NULL); |
+ fData->ref(); |
+} |
+ |
+SkDecodingImageGenerator::~SkDecodingImageGenerator() { |
+ fData->unref(); |
+} |
+ |
+SkData* SkDecodingImageGenerator::refEncodedData() { |
+ fData->ref(); |
+ return fData; |
+} |
+ |
+bool SkDecodingImageGenerator::getInfo(SkImageInfo* info) { |
+ SkASSERT(info != NULL); |
+ return SkImageDecoder::DecodeMemoryToTarget(fData->data(), |
+ fData->size(), |
+ info, NULL); |
+} |
+ |
+bool SkDecodingImageGenerator::getPixels(const SkImageInfo& info, |
+ void* pixels, |
+ size_t rowBytes) { |
+ SkASSERT(pixels != NULL); |
+ SkBitmapFactory::Target target = {pixels, rowBytes}; |
+ SkImageInfo tmpInfo = info; |
+ return SkImageDecoder::DecodeMemoryToTarget(fData->data(), |
+ fData->size(), |
+ &tmpInfo, &target); |
+} |
+bool SkDecodingImageGenerator::Install(SkData* data, SkBitmap* dst) { |
+ SkASSERT(data != NULL); |
+ SkASSERT(dst != NULL); |
+ SkImageGenerator* gen(SkNEW_ARGS(SkDecodingImageGenerator, (data))); |
+ return SkDiscardablePixelRef::Install(gen, dst); |
+} |