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