Index: include/core/SkPixmap.h |
diff --git a/include/core/SkPixmap.h b/include/core/SkPixmap.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4b7a97ffc774149c8a9975b13b5ae39e471738fa |
--- /dev/null |
+++ b/include/core/SkPixmap.h |
@@ -0,0 +1,99 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef SkPixmap_DEFINED |
+#define SkPixmap_DEFINED |
+ |
+#include "SkImageInfo.h" |
+ |
+class SkColorTable; |
+ |
+class SkPixmap { |
+public: |
+ SkPixmap() |
+ : fPixels(NULL), fCTable(NULL), fRowBytes(0), fInfo(SkImageInfo::MakeUnknown(0, 0)) |
+ {} |
+ |
+ SkPixmap(const SkImageInfo& info, const void* addr, size_t rowBytes, |
+ SkColorTable* ctable = NULL) |
+ : fPixels(addr), fCTable(ctable), fRowBytes(rowBytes), fInfo(info) |
+ { |
+ if (kIndex_8_SkColorType == info.colorType()) { |
+ SkASSERT(ctable); |
+ } else { |
+ SkASSERT(NULL == ctable); |
+ } |
+ } |
+ |
+ const SkImageInfo& info() const { return fInfo; } |
+ size_t rowBytes() const { return fRowBytes; } |
+ const void* addr() const { return fPixels; } |
+ SkColorTable* ctable() const { return fCTable; } |
+ |
+ int width() const { return fInfo.width(); } |
+ int height() const { return fInfo.height(); } |
+ SkColorType colorType() const { return fInfo.colorType(); } |
+ SkAlphaType alphaType() const { return fInfo.alphaType(); } |
+ bool isOpaque() const { return fInfo.isOpaque(); } |
+ |
+ int64_t getSafeSize64() const { return fInfo.getSafeSize64(fRowBytes); } |
+ size_t getSafeSize() const { return fInfo.getSafeSize(fRowBytes); } |
+ |
+ const uint32_t* addr32() const { |
+ SkASSERT(4 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
+ return reinterpret_cast<const uint32_t*>(fPixels); |
+ } |
+ |
+ const uint16_t* addr16() const { |
+ SkASSERT(2 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
+ return reinterpret_cast<const uint16_t*>(fPixels); |
+ } |
+ |
+ const uint8_t* addr8() const { |
+ SkASSERT(1 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
+ return reinterpret_cast<const uint8_t*>(fPixels); |
+ } |
+ |
+ const uint32_t* addr32(int x, int y) const { |
+ SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
+ SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
+ return (const uint32_t*)((const char*)this->addr32() + y * fRowBytes + (x << 2)); |
+ } |
+ const uint16_t* addr16(int x, int y) const { |
+ SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
+ SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
+ return (const uint16_t*)((const char*)this->addr16() + y * fRowBytes + (x << 1)); |
+ } |
+ const uint8_t* addr8(int x, int y) const { |
+ SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
+ SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
+ return (const uint8_t*)((const char*)this->addr8() + y * fRowBytes + (x << 0)); |
+ } |
+ const void* addr(int x, int y) const { |
+ return (const char*)fPixels + fInfo.computeOffset(x, y, fRowBytes); |
+ } |
+ |
+ // Writable versions |
+ |
+ uint32_t* writable_addr32(int x, int y) const { |
+ return const_cast<uint32_t*>(this->addr32(x, y)); |
+ } |
+ uint16_t* writable_addr16(int x, int y) const { |
+ return const_cast<uint16_t*>(this->addr16(x, y)); |
+ } |
+ uint8_t* writable_addr8(int x, int y) const { |
+ return const_cast<uint8_t*>(this->addr8(x, y)); |
+ } |
+ |
+private: |
+ const void* fPixels; |
+ SkColorTable* fCTable; |
+ size_t fRowBytes; |
+ SkImageInfo fInfo; |
+}; |
+ |
+#endif |