16997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com/*
26997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * Copyright 2012 Google Inc.
36997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com *
46997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * Use of this source code is governed by a BSD-style license that can be
56997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * found in the LICENSE file.
66997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com */
76997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com
8889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com#include "SkImagePriv.h"
970e359055240d0de93da4ba71bf5833164fb394cmike@reedtribe.org#include "SkCanvas.h"
1070e359055240d0de93da4ba71bf5833164fb394cmike@reedtribe.org#include "SkPicture.h"
11889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
1297af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.comSkImage* SkNewImageFromBitmap(const SkBitmap& bm, bool canSharePixelRef) {
13466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024commit-bot@chromium.org    const SkImageInfo info = bm.info();
14466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024commit-bot@chromium.org    if (kUnknown_SkColorType == info.colorType()) {
15889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        return NULL;
16889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
17889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
18889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    SkImage* image = NULL;
1997af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.com    if (canSharePixelRef || bm.isImmutable()) {
20e13af711d4ff9031c9ed3054a4c33a56a0c62e1fcommit-bot@chromium.org        image = SkNewImageFromPixelRef(info, bm.pixelRef(), bm.rowBytes());
21889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    } else {
22889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        bm.lockPixels();
2370e359055240d0de93da4ba71bf5833164fb394cmike@reedtribe.org        if (bm.getPixels()) {
24b947625800a26194fcf63d7b57dadb1a63677f6amike@reedtribe.org            image = SkImage::NewRasterCopy(info, bm.getPixels(), bm.rowBytes());
25889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        }
26889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        bm.unlockPixels();
27889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
28889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    return image;
29889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com}
30