Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: include/core/SkImageInfo.h

Issue 159173004: SkBitmap now really stores SkImageInfo -- config is just a ruse (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rebase Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/core/SkBitmap.h ('k') | src/core/SkBitmap.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/core/SkImageInfo.h
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index 722ff27437ba622c8c2ec1d2bd31c5a11209c2fa..2de2004aa5b224d73b99f1bb4f9ea4975e932189 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -8,7 +8,7 @@
#ifndef SkImageInfo_DEFINED
#define SkImageInfo_DEFINED
-#include "SkTypes.h"
+#include "SkMath.h"
#include "SkSize.h"
class SkWriteBuffer;
@@ -59,12 +59,17 @@ static inline bool SkAlphaTypeIsOpaque(SkAlphaType at) {
return (unsigned)at <= kOpaque_SkAlphaType;
}
+static inline bool SkAlphaTypeIsValid(unsigned value) {
+ return value >= kIgnore_SkAlphaType && value <= kLastEnum_SkAlphaType;
+}
+
///////////////////////////////////////////////////////////////////////////////
/**
* Describes how to interpret the components of a pixel.
*/
enum SkColorType {
+ kUnknown_SkColorType,
kAlpha_8_SkColorType,
kRGB_565_SkColorType,
kARGB_4444_SkColorType,
@@ -85,6 +90,7 @@ enum SkColorType {
static int SkColorTypeBytesPerPixel(SkColorType ct) {
static const uint8_t gSize[] = {
+ 0, // Unknown
1, // Alpha_8
2, // RGB_565
2, // ARGB_4444
@@ -99,6 +105,14 @@ static int SkColorTypeBytesPerPixel(SkColorType ct) {
return gSize[ct];
}
+static inline size_t SkColorTypeMinRowBytes(SkColorType ct, int width) {
+ return width * SkColorTypeBytesPerPixel(ct);
+}
+
+static inline bool SkColorTypeIsValid(unsigned value) {
+ return value >= kUnknown_SkColorType && value <= kLastEnum_SkColorType;
+}
+
///////////////////////////////////////////////////////////////////////////////
/**
@@ -159,18 +173,31 @@ struct SkImageInfo {
return info;
}
+ int width() const { return fWidth; }
+ int height() const { return fHeight; }
+ SkColorType colorType() const { return fColorType; }
+ SkAlphaType alphaType() const { return fAlphaType; }
+
+ bool isEmpty() const { return fWidth <= 0 || fHeight <= 0; }
+
bool isOpaque() const {
return SkAlphaTypeIsOpaque(fAlphaType);
}
+ SkISize dimensions() const { return SkISize::Make(fWidth, fHeight); }
+
int bytesPerPixel() const {
return SkColorTypeBytesPerPixel(fColorType);
}
+ uint64_t minRowBytes64() const {
+ return sk_64_mul(fWidth, this->bytesPerPixel());
+ }
+
size_t minRowBytes() const {
- return fWidth * this->bytesPerPixel();
+ return (size_t)this->minRowBytes64();
}
-
+
bool operator==(const SkImageInfo& other) const {
return 0 == memcmp(this, &other, sizeof(other));
}
@@ -181,12 +208,23 @@ struct SkImageInfo {
void unflatten(SkReadBuffer&);
void flatten(SkWriteBuffer&) const;
- size_t getSafeSize(size_t rowBytes) const {
+ int64_t getSafeSize64(size_t rowBytes) const {
if (0 == fHeight) {
return 0;
}
- return (fHeight - 1) * rowBytes + fWidth * this->bytesPerPixel();
+ return sk_64_mul(fHeight - 1, rowBytes) + fWidth * this->bytesPerPixel();
}
+
+ size_t getSafeSize(size_t rowBytes) const {
+ return (size_t)this->getSafeSize64(rowBytes);
+ }
+
+ bool validRowBytes(size_t rowBytes) const {
+ uint64_t rb = sk_64_mul(fWidth, this->bytesPerPixel());
+ return rowBytes >= rb;
+ }
+
+ SkDEBUGCODE(void validate() const;)
};
#endif
« no previous file with comments | « include/core/SkBitmap.h ('k') | src/core/SkBitmap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698