/* * 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); }