1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #include "SkCanvas.h" 11 #include "SkColorPriv.h" 12 13 /** 14 * Converts pixels from one Config8888 to another Config8888 15 */ 16 void SkConvertConfig8888Pixels(uint32_t* dstPixels, 17 size_t dstRowBytes, 18 SkCanvas::Config8888 dstConfig, 19 const uint32_t* srcPixels, 20 size_t srcRowBytes, 21 SkCanvas::Config8888 srcConfig, 22 int width, 23 int height); 24 25 /** 26 * Packs a, r, g, b, values into byte order specified by config. 27 */ 28 uint32_t SkPackConfig8888(SkCanvas::Config8888 config, 29 uint32_t a, 30 uint32_t r, 31 uint32_t g, 32 uint32_t b); 33 34 namespace { 35 36 /** 37 Copies all pixels from a bitmap to a dst ptr with a given rowBytes and 38 Config8888. The bitmap must have kARGB_8888_Config. 39 */ 40 inline void SkCopyBitmapToConfig8888(uint32_t* dstPixels, 41 size_t dstRowBytes, 42 SkCanvas::Config8888 dstConfig8888, 43 const SkBitmap& srcBmp); 44 45 /** 46 Copies over all pixels in a bitmap from a src ptr with a given rowBytes and 47 Config8888. The bitmap must have pixels and be kARGB_8888_Config. 48 */ 49 inline void SkCopyConfig8888ToBitmap(const SkBitmap& dstBmp, 50 const uint32_t* srcPixels, 51 size_t srcRowBytes, 52 SkCanvas::Config8888 srcConfig8888); 53 54 } 55 56 /////////////////////////////////////////////////////////////////////////////// 57 // Implementation 58 59 namespace { 60 61 inline void SkCopyBitmapToConfig8888(uint32_t* dstPixels, 62 size_t dstRowBytes, 63 SkCanvas::Config8888 dstConfig8888, 64 const SkBitmap& srcBmp) { 65 SkASSERT(SkBitmap::kARGB_8888_Config == srcBmp.config()); 66 SkAutoLockPixels alp(srcBmp); 67 int w = srcBmp.width(); 68 int h = srcBmp.height(); 69 size_t srcRowBytes = srcBmp.rowBytes(); 70 const uint32_t* srcPixels = reinterpret_cast<uint32_t*>(srcBmp.getPixels()); 71 72 SkConvertConfig8888Pixels(dstPixels, dstRowBytes, dstConfig8888, srcPixels, srcRowBytes, SkCanvas::kNative_Premul_Config8888, w, h); 73 } 74 75 inline void SkCopyConfig8888ToBitmap(const SkBitmap& dstBmp, 76 const uint32_t* srcPixels, 77 size_t srcRowBytes, 78 SkCanvas::Config8888 srcConfig8888) { 79 SkASSERT(SkBitmap::kARGB_8888_Config == dstBmp.config()); 80 SkAutoLockPixels alp(dstBmp); 81 int w = dstBmp.width(); 82 int h = dstBmp.height(); 83 size_t dstRowBytes = dstBmp.rowBytes(); 84 uint32_t* dstPixels = reinterpret_cast<uint32_t*>(dstBmp.getPixels()); 85 86 SkConvertConfig8888Pixels(dstPixels, dstRowBytes, SkCanvas::kNative_Premul_Config8888, srcPixels, srcRowBytes, srcConfig8888, w, h); 87 } 88 89 } 90