/*
* 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);
}
}