| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkPixmap_DEFINED | 8 #ifndef SkPixmap_DEFINED |
| 9 #define SkPixmap_DEFINED | 9 #define SkPixmap_DEFINED |
| 10 | 10 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 SkColorType colorType() const { return fInfo.colorType(); } | 68 SkColorType colorType() const { return fInfo.colorType(); } |
| 69 SkAlphaType alphaType() const { return fInfo.alphaType(); } | 69 SkAlphaType alphaType() const { return fInfo.alphaType(); } |
| 70 bool isOpaque() const { return fInfo.isOpaque(); } | 70 bool isOpaque() const { return fInfo.isOpaque(); } |
| 71 | 71 |
| 72 SkIRect bounds() const { return SkIRect::MakeWH(this->width(), this->height(
)); } | 72 SkIRect bounds() const { return SkIRect::MakeWH(this->width(), this->height(
)); } |
| 73 | 73 |
| 74 uint64_t getSize64() const { return sk_64_mul(fInfo.height(), fRowBytes); } | 74 uint64_t getSize64() const { return sk_64_mul(fInfo.height(), fRowBytes); } |
| 75 uint64_t getSafeSize64() const { return fInfo.getSafeSize64(fRowBytes); } | 75 uint64_t getSafeSize64() const { return fInfo.getSafeSize64(fRowBytes); } |
| 76 size_t getSafeSize() const { return fInfo.getSafeSize(fRowBytes); } | 76 size_t getSafeSize() const { return fInfo.getSafeSize(fRowBytes); } |
| 77 | 77 |
| 78 const void* addr(int x, int y) const { |
| 79 return (const char*)fPixels + fInfo.computeOffset(x, y, fRowBytes); |
| 80 } |
| 81 const uint8_t* addr8() const { |
| 82 SkASSERT(1 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
| 83 return reinterpret_cast<const uint8_t*>(fPixels); |
| 84 } |
| 85 const uint16_t* addr16() const { |
| 86 SkASSERT(2 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
| 87 return reinterpret_cast<const uint16_t*>(fPixels); |
| 88 } |
| 78 const uint32_t* addr32() const { | 89 const uint32_t* addr32() const { |
| 79 SkASSERT(4 == SkColorTypeBytesPerPixel(fInfo.colorType())); | 90 SkASSERT(4 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
| 80 return reinterpret_cast<const uint32_t*>(fPixels); | 91 return reinterpret_cast<const uint32_t*>(fPixels); |
| 81 } | 92 } |
| 82 | 93 const uint64_t* addr64() const { |
| 83 const uint16_t* addr16() const { | 94 SkASSERT(8 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
| 84 SkASSERT(2 == SkColorTypeBytesPerPixel(fInfo.colorType())); | 95 return reinterpret_cast<const uint64_t*>(fPixels); |
| 96 } |
| 97 const uint16_t* addrF16() const { |
| 98 SkASSERT(8 == SkColorTypeBytesPerPixel(fInfo.colorType())); |
| 99 SkASSERT(kRGBA_F16_SkColorType == fInfo.colorType()); |
| 85 return reinterpret_cast<const uint16_t*>(fPixels); | 100 return reinterpret_cast<const uint16_t*>(fPixels); |
| 86 } | 101 } |
| 87 | 102 |
| 88 const uint8_t* addr8() const { | 103 // Offset by the specified x,y coordinates |
| 89 SkASSERT(1 == SkColorTypeBytesPerPixel(fInfo.colorType())); | |
| 90 return reinterpret_cast<const uint8_t*>(fPixels); | |
| 91 } | |
| 92 | 104 |
| 93 const uint32_t* addr32(int x, int y) const { | 105 const uint8_t* addr8(int x, int y) const { |
| 94 SkASSERT((unsigned)x < (unsigned)fInfo.width()); | 106 SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
| 95 SkASSERT((unsigned)y < (unsigned)fInfo.height()); | 107 SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
| 96 return (const uint32_t*)((const char*)this->addr32() + y * fRowBytes + (
x << 2)); | 108 return (const uint8_t*)((const char*)this->addr8() + y * fRowBytes + (x
<< 0)); |
| 97 } | 109 } |
| 98 const uint16_t* addr16(int x, int y) const { | 110 const uint16_t* addr16(int x, int y) const { |
| 99 SkASSERT((unsigned)x < (unsigned)fInfo.width()); | 111 SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
| 100 SkASSERT((unsigned)y < (unsigned)fInfo.height()); | 112 SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
| 101 return (const uint16_t*)((const char*)this->addr16() + y * fRowBytes + (
x << 1)); | 113 return (const uint16_t*)((const char*)this->addr16() + y * fRowBytes + (
x << 1)); |
| 102 } | 114 } |
| 103 const uint8_t* addr8(int x, int y) const { | 115 const uint32_t* addr32(int x, int y) const { |
| 104 SkASSERT((unsigned)x < (unsigned)fInfo.width()); | 116 SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
| 105 SkASSERT((unsigned)y < (unsigned)fInfo.height()); | 117 SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
| 106 return (const uint8_t*)((const char*)this->addr8() + y * fRowBytes + (x
<< 0)); | 118 return (const uint32_t*)((const char*)this->addr32() + y * fRowBytes + (
x << 2)); |
| 107 } | 119 } |
| 108 const void* addr(int x, int y) const { | 120 const uint64_t* addr64(int x, int y) const { |
| 109 return (const char*)fPixels + fInfo.computeOffset(x, y, fRowBytes); | 121 SkASSERT((unsigned)x < (unsigned)fInfo.width()); |
| 122 SkASSERT((unsigned)y < (unsigned)fInfo.height()); |
| 123 return (const uint64_t*)((const char*)this->addr64() + y * fRowBytes + (
x << 3)); |
| 124 } |
| 125 const uint16_t* addrF16(int x, int y) const { |
| 126 SkASSERT(kRGBA_F16_SkColorType == fInfo.colorType()); |
| 127 return reinterpret_cast<const uint16_t*>(this->addr64(x, y)); |
| 110 } | 128 } |
| 111 | 129 |
| 112 // Writable versions | 130 // Writable versions |
| 113 | 131 |
| 114 void* writable_addr() const { return const_cast<void*>(fPixels); } | 132 void* writable_addr() const { return const_cast<void*>(fPixels); } |
| 115 uint32_t* writable_addr32(int x, int y) const { | 133 uint8_t* writable_addr8(int x, int y) const { |
| 116 return const_cast<uint32_t*>(this->addr32(x, y)); | 134 return const_cast<uint8_t*>(this->addr8(x, y)); |
| 117 } | 135 } |
| 118 uint16_t* writable_addr16(int x, int y) const { | 136 uint16_t* writable_addr16(int x, int y) const { |
| 119 return const_cast<uint16_t*>(this->addr16(x, y)); | 137 return const_cast<uint16_t*>(this->addr16(x, y)); |
| 120 } | 138 } |
| 121 uint8_t* writable_addr8(int x, int y) const { | 139 uint32_t* writable_addr32(int x, int y) const { |
| 122 return const_cast<uint8_t*>(this->addr8(x, y)); | 140 return const_cast<uint32_t*>(this->addr32(x, y)); |
| 141 } |
| 142 uint64_t* writable_addr64(int x, int y) const { |
| 143 return const_cast<uint64_t*>(this->addr64(x, y)); |
| 144 } |
| 145 uint16_t* writable_addrF16(int x, int y) const { |
| 146 return reinterpret_cast<uint16_t*>(writable_addr64(x, y)); |
| 123 } | 147 } |
| 124 | 148 |
| 125 // copy methods | 149 // copy methods |
| 126 | 150 |
| 127 bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBy
tes, | 151 bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBy
tes, |
| 128 int srcX, int srcY) const; | 152 int srcX, int srcY) const; |
| 129 bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBy
tes) const { | 153 bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBy
tes) const { |
| 130 return this->readPixels(dstInfo, dstPixels, dstRowBytes, 0, 0); | 154 return this->readPixels(dstInfo, dstPixels, dstRowBytes, 0, 0); |
| 131 } | 155 } |
| 132 bool readPixels(const SkPixmap& dst, int srcX, int srcY) const { | 156 bool readPixels(const SkPixmap& dst, int srcX, int srcY) const { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 145 */ | 169 */ |
| 146 bool scalePixels(const SkPixmap& dst, SkFilterQuality) const; | 170 bool scalePixels(const SkPixmap& dst, SkFilterQuality) const; |
| 147 | 171 |
| 148 /** | 172 /** |
| 149 * Returns true if pixels were written to (e.g. if colorType is kUnknown_Sk
ColorType, this | 173 * Returns true if pixels were written to (e.g. if colorType is kUnknown_Sk
ColorType, this |
| 150 * will return false). If subset does not intersect the bounds of this pixm
ap, returns false. | 174 * will return false). If subset does not intersect the bounds of this pixm
ap, returns false. |
| 151 */ | 175 */ |
| 152 bool erase(SkColor, const SkIRect& subset) const; | 176 bool erase(SkColor, const SkIRect& subset) const; |
| 153 | 177 |
| 154 bool erase(SkColor color) const { return this->erase(color, this->bounds());
} | 178 bool erase(SkColor color) const { return this->erase(color, this->bounds());
} |
| 179 bool erase(const SkColor4f&, const SkIRect* subset = nullptr) const; |
| 155 | 180 |
| 156 private: | 181 private: |
| 157 const void* fPixels; | 182 const void* fPixels; |
| 158 SkColorTable* fCTable; | 183 SkColorTable* fCTable; |
| 159 size_t fRowBytes; | 184 size_t fRowBytes; |
| 160 SkImageInfo fInfo; | 185 SkImageInfo fInfo; |
| 161 }; | 186 }; |
| 162 | 187 |
| 163 ////////////////////////////////////////////////////////////////////////////////
///////////// | 188 ////////////////////////////////////////////////////////////////////////////////
///////////// |
| 164 | 189 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 private: | 288 private: |
| 264 void (*fUnlockProc)(void*); | 289 void (*fUnlockProc)(void*); |
| 265 void* fUnlockContext; | 290 void* fUnlockContext; |
| 266 SkPixmap fPixmap; | 291 SkPixmap fPixmap; |
| 267 bool fIsLocked; | 292 bool fIsLocked; |
| 268 | 293 |
| 269 friend class SkBitmap; | 294 friend class SkBitmap; |
| 270 }; | 295 }; |
| 271 | 296 |
| 272 #endif | 297 #endif |
| OLD | NEW |