Home | History | Annotate | Download | only in image
      1 /*
      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 "SkImagePriv.h"
      9 #include "SkCanvas.h"
     10 #include "SkPicture.h"
     11 
     12 #ifdef SK_SUPPORT_LEGACY_BITMAP_CONFIG
     13 SkBitmap::Config SkColorTypeToBitmapConfig(SkColorType colorType) {
     14     switch (colorType) {
     15         case kAlpha_8_SkColorType:
     16             return SkBitmap::kA8_Config;
     17 
     18         case kARGB_4444_SkColorType:
     19             return SkBitmap::kARGB_4444_Config;
     20 
     21         case kRGB_565_SkColorType:
     22             return SkBitmap::kRGB_565_Config;
     23 
     24         case kN32_SkColorType:
     25             return SkBitmap::kARGB_8888_Config;
     26 
     27         case kIndex_8_SkColorType:
     28             return SkBitmap::kIndex8_Config;
     29 
     30         default:
     31             // break for unsupported colortypes
     32             break;
     33     }
     34     return SkBitmap::kNo_Config;
     35 }
     36 
     37 SkColorType SkBitmapConfigToColorType(SkBitmap::Config config) {
     38     static const SkColorType gCT[] = {
     39         kUnknown_SkColorType,   // kNo_Config
     40         kAlpha_8_SkColorType,   // kA8_Config
     41         kIndex_8_SkColorType,   // kIndex8_Config
     42         kRGB_565_SkColorType,   // kRGB_565_Config
     43         kARGB_4444_SkColorType, // kARGB_4444_Config
     44         kN32_SkColorType,   // kARGB_8888_Config
     45     };
     46     SkASSERT((unsigned)config < SK_ARRAY_COUNT(gCT));
     47     return gCT[config];
     48 }
     49 #endif
     50 
     51 SkImage* SkNewImageFromBitmap(const SkBitmap& bm, bool canSharePixelRef) {
     52     const SkImageInfo info = bm.info();
     53     if (kUnknown_SkColorType == info.colorType()) {
     54         return NULL;
     55     }
     56 
     57     SkImage* image = NULL;
     58     if (canSharePixelRef || bm.isImmutable()) {
     59         image = SkNewImageFromPixelRef(info, bm.pixelRef(), bm.rowBytes());
     60     } else {
     61         bm.lockPixels();
     62         if (bm.getPixels()) {
     63             image = SkImage::NewRasterCopy(info, bm.getPixels(), bm.rowBytes());
     64         }
     65         bm.unlockPixels();
     66     }
     67     return image;
     68 }
     69