blob: ca5efd1fe15a8eac489290e2dc24fd37afb687de [file] [log] [blame]
/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkColorTable_DEFINED
#define SkColorTable_DEFINED
#include "../private/SkOnce.h"
#include "SkColor.h"
#include "SkFlattenable.h"
#include "SkImageInfo.h"
/** \class SkColorTable
SkColorTable holds an array SkPMColors (premultiplied 32-bit colors) used by
8-bit bitmaps, where the bitmap bytes are interpreted as indices into the colortable.
SkColorTable is thread-safe.
*/
class SK_API SkColorTable : public SkRefCnt {
public:
static sk_sp<SkColorTable> Make(const SkPMColor colors[], int count);
/** Copy up to 256 colors into a new SkColorTable.
*/
SkColorTable(const SkPMColor colors[], int count);
~SkColorTable() override;
/** Returns the number of colors in the table.
*/
int count() const { return fCount; }
/** Returns the specified color from the table. In the debug build, this asserts that
* the index is in range (0 <= index < count).
*/
SkPMColor operator[](int index) const {
SkASSERT(fColors != NULL && (unsigned)index < (unsigned)fCount);
return fColors[index];
}
/** Return the array of colors for reading.
*/
const SkPMColor* readColors() const { return fColors; }
/** read16BitCache() returns the array of RGB16 colors that mirror the 32bit colors.
*/
const uint16_t* read16BitCache() const;
void writeToBuffer(SkWriteBuffer&) const;
// may return null
static sk_sp<SkColorTable> Create(SkReadBuffer&);
private:
enum AllocatedWithMalloc {
kAllocatedWithMalloc
};
// assumes ownership of colors (assumes it was allocated w/ malloc)
SkColorTable(SkPMColor* colors, int count, AllocatedWithMalloc);
SkPMColor* fColors;
mutable uint16_t* f16BitCache = nullptr;
mutable SkOnce f16BitCacheOnce;
int fCount;
void init(const SkPMColor* colors, int count);
friend class SkImageGenerator;
typedef SkRefCnt INHERITED;
};
#endif