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
12c3b3266b7db2f1a41d41ecac010c766b7ad8eebcreed#ifdef SK_SUPPORT_LEGACY_BITMAP_CONFIG
133d50ea1b87132833d7eab38964f40315ba553205halcanary@google.comSkBitmap::Config SkColorTypeToBitmapConfig(SkColorType colorType) {
143d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com    switch (colorType) {
152bd8b8100529c96c81c30f749f672f4caf775b04reed@google.com        case kAlpha_8_SkColorType:
16383a697692cf46951fd451f6f4c3d03634a6a1cbreed@google.com            return SkBitmap::kA8_Config;
17889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
189230ea29718bcf1a92a89a1a518fb896bbbe00cfreed@google.com        case kARGB_4444_SkColorType:
199230ea29718bcf1a92a89a1a518fb896bbbe00cfreed@google.com            return SkBitmap::kARGB_4444_Config;
20cf0803b46f60d9fcb5ad9a376b638c4c32b655deskia.committer@gmail.com
212bd8b8100529c96c81c30f749f672f4caf775b04reed@google.com        case kRGB_565_SkColorType:
22889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com            return SkBitmap::kRGB_565_Config;
23cf0803b46f60d9fcb5ad9a376b638c4c32b655deskia.committer@gmail.com
2428fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org        case kN32_SkColorType:
25383a697692cf46951fd451f6f4c3d03634a6a1cbreed@google.com            return SkBitmap::kARGB_8888_Config;
26572a86584602bcd9709d60f3c857750c4018c3d1skia.committer@gmail.com
279230ea29718bcf1a92a89a1a518fb896bbbe00cfreed@google.com        case kIndex_8_SkColorType:
2823be7a58d9d69ae0a06788c2d798f2f92baea29creed@google.com            return SkBitmap::kIndex8_Config;
2923be7a58d9d69ae0a06788c2d798f2f92baea29creed@google.com
30d28ba8010c6058bf073f7e815d5b2d7fdf698601reed@google.com        default:
31d28ba8010c6058bf073f7e815d5b2d7fdf698601reed@google.com            // break for unsupported colortypes
32d28ba8010c6058bf073f7e815d5b2d7fdf698601reed@google.com            break;
33889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
34889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    return SkBitmap::kNo_Config;
35889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com}
36889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
3761e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.orgSkColorType SkBitmapConfigToColorType(SkBitmap::Config config) {
3861e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    static const SkColorType gCT[] = {
3961e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kUnknown_SkColorType,   // kNo_Config
4061e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kAlpha_8_SkColorType,   // kA8_Config
4161e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kIndex_8_SkColorType,   // kIndex8_Config
4261e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kRGB_565_SkColorType,   // kRGB_565_Config
4361e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kARGB_4444_SkColorType, // kARGB_4444_Config
4428fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org        kN32_SkColorType,   // kARGB_8888_Config
4561e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    };
4661e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    SkASSERT((unsigned)config < SK_ARRAY_COUNT(gCT));
4761e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    return gCT[config];
483d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com}
49c3b3266b7db2f1a41d41ecac010c766b7ad8eebcreed#endif
503d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com
5197af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.comSkImage* SkNewImageFromBitmap(const SkBitmap& bm, bool canSharePixelRef) {
52466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024commit-bot@chromium.org    const SkImageInfo info = bm.info();
53466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024commit-bot@chromium.org    if (kUnknown_SkColorType == info.colorType()) {
54889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        return NULL;
55889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
56889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
57889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    SkImage* image = NULL;
5897af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.com    if (canSharePixelRef || bm.isImmutable()) {
59e13af711d4ff9031c9ed3054a4c33a56a0c62e1fcommit-bot@chromium.org        image = SkNewImageFromPixelRef(info, bm.pixelRef(), bm.rowBytes());
60889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    } else {
61889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        bm.lockPixels();
6270e359055240d0de93da4ba71bf5833164fb394cmike@reedtribe.org        if (bm.getPixels()) {
63b947625800a26194fcf63d7b57dadb1a63677f6amike@reedtribe.org            image = SkImage::NewRasterCopy(info, bm.getPixels(), bm.rowBytes());
64889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        }
65889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        bm.unlockPixels();
66889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
67889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    return image;
68889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com}
69