summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/src/codec/SkPixmapUtils.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--gfx/skia/skia/src/codec/SkPixmapUtils.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/codec/SkPixmapUtils.h b/gfx/skia/skia/src/codec/SkPixmapUtils.h
new file mode 100644
index 0000000000..e438fbbe83
--- /dev/null
+++ b/gfx/skia/skia/src/codec/SkPixmapUtils.h
@@ -0,0 +1,61 @@
+/*
+ * 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 SkPixmapUtils_DEFINED
+#define SkPixmapUtils_DEFINED
+
+#include "include/codec/SkEncodedOrigin.h"
+#include "include/core/SkImageInfo.h"
+#include "include/core/SkPixmap.h"
+#include "src/core/SkAutoPixmapStorage.h"
+
+class SkPixmapUtils {
+public:
+ /**
+ * Copy the pixels in this pixmap into dst, applying the orientation transformations specified
+ * by the flags. If the inputs are invalid, this returns false and no copy is made.
+ */
+ static bool Orient(const SkPixmap& dst, const SkPixmap& src, SkEncodedOrigin);
+
+ static SkImageInfo SwapWidthHeight(const SkImageInfo& info);
+
+ /**
+ * Decode an image and then copy into dst, applying origin.
+ *
+ * @param dst SkPixmap to write the final image, after
+ * applying the origin.
+ * @param origin SkEncodedOrigin to apply to the raw pixels.
+ * @param decode Function for decoding into a pixmap without
+ * applying the origin.
+ */
+
+ template <typename Fn>
+ static bool Orient(const SkPixmap& dst, SkEncodedOrigin origin, Fn&& decode) {
+ SkAutoPixmapStorage storage;
+ const SkPixmap* tmp = &dst;
+ if (origin != kTopLeft_SkEncodedOrigin) {
+ auto info = dst.info();
+ if (SkEncodedOriginSwapsWidthHeight(origin)) {
+ info = SwapWidthHeight(info);
+ }
+ if (!storage.tryAlloc(info)) {
+ return false;
+ }
+ tmp = &storage;
+ }
+ if (!decode(*tmp)) {
+ return false;
+ }
+ if (tmp != &dst) {
+ return Orient(dst, *tmp, origin);
+ }
+ return true;
+ }
+
+};
+
+#endif // SkPixmapUtils_DEFINED