blob: 4e5d90bd604d00186636eacb52bc03417ebe7155 [file] [log] [blame]
scroggo@google.com9f686f32012-11-29 21:05:37 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkBitmapFactory.h"
9
10#include "SkBitmap.h"
11#include "SkData.h"
12#include "SkImageDecoder.h"
13#include "SkStream.h"
14#include "SkTemplates.h"
15
16bool SkBitmapFactory::DecodeBitmap(SkBitmap* dst, const SkData* data, Constraints constraint) {
17 if (NULL == data || data->size() == 0 || dst == NULL) {
18 return false;
19 }
20
21 SkMemoryStream stream(data->data(), data->size());
22 SkAutoTDelete<SkImageDecoder> decoder (SkImageDecoder::Factory(&stream));
23 if (decoder.get() == NULL) {
24 return false;
25 }
26
27 SkBitmap tmp;
28 SkImageDecoder::Mode mode;
29 if (kDecodeBoundsOnly_Constraint == constraint) {
30 mode = SkImageDecoder::kDecodeBounds_Mode;
31 } else {
32 mode = SkImageDecoder::kDecodePixels_Mode;
33 }
34
35 if (decoder->decode(&stream, &tmp, mode)) {
36 tmp.swap(*dst);
37 return true;
38 } else {
39 return false;
40 }
41}