/* * 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 "SkBitmapFactory.h" #include "SkBitmap.h" #include "SkData.h" #include "SkImageDecoder.h" #include "SkStream.h" #include "SkTemplates.h" bool SkBitmapFactory::DecodeBitmap(SkBitmap* dst, const SkData* data, Constraints constraint) { if (NULL == data || data->size() == 0 || dst == NULL) { return false; } SkMemoryStream stream(data->data(), data->size()); SkAutoTDelete<SkImageDecoder> decoder (SkImageDecoder::Factory(&stream)); if (decoder.get() == NULL) { return false; } SkBitmap tmp; SkImageDecoder::Mode mode; if (kDecodeBoundsOnly_Constraint == constraint) { mode = SkImageDecoder::kDecodeBounds_Mode; } else { mode = SkImageDecoder::kDecodePixels_Mode; } if (decoder->decode(&stream, &tmp, mode)) { tmp.swap(*dst); return true; } else { return false; } }