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