/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkCanvas.h" #include "SkColorPriv.h" /** * Converts pixels from one Config8888 to another Config8888 */ void SkConvertConfig8888Pixels(uint32_t* dstPixels, size_t dstRowBytes, SkCanvas::Config8888 dstConfig, const uint32_t* srcPixels, size_t srcRowBytes, SkCanvas::Config8888 srcConfig, int width, int height); /** * Packs a, r, g, b, values into byte order specified by config. */ uint32_t SkPackConfig8888(SkCanvas::Config8888 config, uint32_t a, uint32_t r, uint32_t g, uint32_t b); namespace { /** Copies all pixels from a bitmap to a dst ptr with a given rowBytes and Config8888. The bitmap must have kARGB_8888_Config. */ inline void SkCopyBitmapToConfig8888(uint32_t* dstPixels, size_t dstRowBytes, SkCanvas::Config8888 dstConfig8888, const SkBitmap& srcBmp); /** Copies over all pixels in a bitmap from a src ptr with a given rowBytes and Config8888. The bitmap must have pixels and be kARGB_8888_Config. */ inline void SkCopyConfig8888ToBitmap(const SkBitmap& dstBmp, const uint32_t* srcPixels, size_t srcRowBytes, SkCanvas::Config8888 srcConfig8888); } /////////////////////////////////////////////////////////////////////////////// // Implementation namespace { inline void SkCopyBitmapToConfig8888(uint32_t* dstPixels, size_t dstRowBytes, SkCanvas::Config8888 dstConfig8888, const SkBitmap& srcBmp) { SkASSERT(SkBitmap::kARGB_8888_Config == srcBmp.config()); SkAutoLockPixels alp(srcBmp); int w = srcBmp.width(); int h = srcBmp.height(); size_t srcRowBytes = srcBmp.rowBytes(); const uint32_t* srcPixels = reinterpret_cast<uint32_t*>(srcBmp.getPixels()); SkConvertConfig8888Pixels(dstPixels, dstRowBytes, dstConfig8888, srcPixels, srcRowBytes, SkCanvas::kNative_Premul_Config8888, w, h); } inline void SkCopyConfig8888ToBitmap(const SkBitmap& dstBmp, const uint32_t* srcPixels, size_t srcRowBytes, SkCanvas::Config8888 srcConfig8888) { SkASSERT(SkBitmap::kARGB_8888_Config == dstBmp.config()); SkAutoLockPixels alp(dstBmp); int w = dstBmp.width(); int h = dstBmp.height(); size_t dstRowBytes = dstBmp.rowBytes(); uint32_t* dstPixels = reinterpret_cast<uint32_t*>(dstBmp.getPixels()); SkConvertConfig8888Pixels(dstPixels, dstRowBytes, SkCanvas::kNative_Premul_Config8888, srcPixels, srcRowBytes, srcConfig8888, w, h); } }