SkImagePriv.cpp revision 466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024
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
123d50ea1b87132833d7eab38964f40315ba553205halcanary@google.comSkBitmap::Config SkColorTypeToBitmapConfig(SkColorType colorType) {
133d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com    switch (colorType) {
142bd8b8100529c96c81c30f749f672f4caf775b04reed@google.com        case kAlpha_8_SkColorType:
15383a697692cf46951fd451f6f4c3d03634a6a1cbreed@google.com            return SkBitmap::kA8_Config;
16889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
179230ea29718bcf1a92a89a1a518fb896bbbe00cfreed@google.com        case kARGB_4444_SkColorType:
189230ea29718bcf1a92a89a1a518fb896bbbe00cfreed@google.com            return SkBitmap::kARGB_4444_Config;
19cf0803b46f60d9fcb5ad9a376b638c4c32b655deskia.committer@gmail.com
202bd8b8100529c96c81c30f749f672f4caf775b04reed@google.com        case kRGB_565_SkColorType:
21889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com            return SkBitmap::kRGB_565_Config;
22cf0803b46f60d9fcb5ad9a376b638c4c32b655deskia.committer@gmail.com
2328fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org        case kN32_SkColorType:
24383a697692cf46951fd451f6f4c3d03634a6a1cbreed@google.com            return SkBitmap::kARGB_8888_Config;
25572a86584602bcd9709d60f3c857750c4018c3d1skia.committer@gmail.com
269230ea29718bcf1a92a89a1a518fb896bbbe00cfreed@google.com        case kIndex_8_SkColorType:
2723be7a58d9d69ae0a06788c2d798f2f92baea29creed@google.com            return SkBitmap::kIndex8_Config;
2823be7a58d9d69ae0a06788c2d798f2f92baea29creed@google.com
29d28ba8010c6058bf073f7e815d5b2d7fdf698601reed@google.com        default:
30d28ba8010c6058bf073f7e815d5b2d7fdf698601reed@google.com            // break for unsupported colortypes
31d28ba8010c6058bf073f7e815d5b2d7fdf698601reed@google.com            break;
32889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
33889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    return SkBitmap::kNo_Config;
34889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com}
35889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
363d50ea1b87132833d7eab38964f40315ba553205halcanary@google.comSkBitmap::Config SkImageInfoToBitmapConfig(const SkImageInfo& info) {
373d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com    return SkColorTypeToBitmapConfig(info.fColorType);
383d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com}
393d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com
4061e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.orgSkColorType SkBitmapConfigToColorType(SkBitmap::Config config) {
4161e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    static const SkColorType gCT[] = {
4261e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kUnknown_SkColorType,   // kNo_Config
4361e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kAlpha_8_SkColorType,   // kA8_Config
4461e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kIndex_8_SkColorType,   // kIndex8_Config
4561e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kRGB_565_SkColorType,   // kRGB_565_Config
4661e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org        kARGB_4444_SkColorType, // kARGB_4444_Config
4728fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org        kN32_SkColorType,   // kARGB_8888_Config
4861e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    };
4961e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    SkASSERT((unsigned)config < SK_ARRAY_COUNT(gCT));
5061e96cd44624c9faceb625519c1b29775b161f45commit-bot@chromium.org    return gCT[config];
513d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com}
523d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com
5397af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.comSkImage* SkNewImageFromBitmap(const SkBitmap& bm, bool canSharePixelRef) {
54466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024commit-bot@chromium.org    const SkImageInfo info = bm.info();
55466f5f3e44e703ca58b43ac1c4ac3bfa0e1ff024commit-bot@chromium.org    if (kUnknown_SkColorType == info.colorType()) {
56889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        return NULL;
57889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
58889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com
59889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    SkImage* image = NULL;
6097af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.com    if (canSharePixelRef || bm.isImmutable()) {
61e13af711d4ff9031c9ed3054a4c33a56a0c62e1fcommit-bot@chromium.org        image = SkNewImageFromPixelRef(info, bm.pixelRef(), bm.rowBytes());
62889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    } else {
63889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        bm.lockPixels();
6470e359055240d0de93da4ba71bf5833164fb394cmike@reedtribe.org        if (bm.getPixels()) {
65b947625800a26194fcf63d7b57dadb1a63677f6amike@reedtribe.org            image = SkImage::NewRasterCopy(info, bm.getPixels(), bm.rowBytes());
66889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        }
67889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com        bm.unlockPixels();
68889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    }
69889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com    return image;
70889b09edfeb5f461ca283dfd08ee6b23560a7859reed@google.com}
71