Lagrange
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Modules Pages
common.h
1/*
2 * Copyright 2023 Adobe. All rights reserved.
3 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License. You may obtain a copy
5 * of the License at http://www.apache.org/licenses/LICENSE-2.0
6 *
7 * Unless required by applicable law or agreed to in writing, software distributed under
8 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9 * OF ANY KIND, either express or implied. See the License for the specific language
10 * governing permissions and limitations under the License.
11 */
12#pragma once
13
14#include <lagrange/image/ImageType.h>
15#include <string>
16
17namespace lagrange {
18namespace image_io {
19
20enum class FileType { png, jpg, exr, bin, unknown };
21
22inline FileType file_extension_to_file_type(const std::string& extension)
23{
24 if (".png" == extension) {
25 return FileType::png;
26 } else if (".jpg" == extension || ".jpeg" == extension) {
27 return FileType::jpg;
28 } else if (".exr" == extension) {
29 return FileType::exr;
30 } else if (".bin" == extension) {
31 return FileType::bin;
32 } else {
33 return FileType::unknown;
34 }
35}
36inline std::string file_type_to_file_extension(FileType type)
37{
38 switch (type) {
39 case FileType::png: return ".png";
40 case FileType::jpg: return ".jpg";
41 case FileType::exr: return ".exr";
42 case FileType::bin: return ".bin";
43 case FileType::unknown: return "";
44 default: return "";
45 }
46}
47
48inline FileType precision_to_file_type(image::ImagePrecision precision)
49{
50 switch (precision) {
51 case lagrange::image::ImagePrecision::uint8: return FileType::png;
52 case lagrange::image::ImagePrecision::uint32:
53 case lagrange::image::ImagePrecision::float32: return FileType::exr;
54 case lagrange::image::ImagePrecision::int8:
55 case lagrange::image::ImagePrecision::int32:
56 case lagrange::image::ImagePrecision::float64: return FileType::bin;
57 case lagrange::image::ImagePrecision::unknown:
58 default: return FileType::unknown;
59 }
60}
61
62inline size_t size_of_precision(image::ImagePrecision precision)
63{
64 switch (precision) {
65 case lagrange::image::ImagePrecision::uint8:
66 case lagrange::image::ImagePrecision::int8: return 1;
67 case lagrange::image::ImagePrecision::uint32:
68 case lagrange::image::ImagePrecision::int32:
69 case lagrange::image::ImagePrecision::float32: return 4;
70 case lagrange::image::ImagePrecision::float64: return 8;
71 case lagrange::image::ImagePrecision::unknown:
72 default: return 0;
73 }
74}
75
76inline std::string precision_to_bin_header(image::ImagePrecision precision)
77{
78 if (image::ImagePrecision::int8 == precision) {
79 return "int8";
80 } else if (image::ImagePrecision::int32 == precision) {
81 return "int32";
82 } else if (image::ImagePrecision::float64 == precision) {
83 return "float64";
84 } else {
85 return "";
86 }
87}
88inline image::ImagePrecision bin_header_to_precision(const std::string& header)
89{
90 if ("int8" == header) {
91 return image::ImagePrecision::int8;
92 } else if ("int32" == header) {
93 return image::ImagePrecision::int32;
94 } else if ("float64" == header) {
95 return image::ImagePrecision::float64;
96 } else {
97 return image::ImagePrecision::unknown;
98 }
99}
100
101} // namespace image_io
102} // namespace lagrange
Main namespace for Lagrange.
Definition: AABBIGL.h:30