Lagrange
Loading...
Searching...
No Matches
common.h
1/*
2 * Copyright 2020 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::uint16: return FileType::unknown;
53 case lagrange::image::ImagePrecision::uint32:
54 case lagrange::image::ImagePrecision::float32: return FileType::exr;
55 case lagrange::image::ImagePrecision::int8:
56 case lagrange::image::ImagePrecision::int32:
57 case lagrange::image::ImagePrecision::float64: return FileType::bin;
58 case lagrange::image::ImagePrecision::unknown:
59 default: return FileType::unknown;
60 }
61}
62
63inline size_t size_of_precision(image::ImagePrecision precision)
64{
65 switch (precision) {
66 case lagrange::image::ImagePrecision::uint8:
67 case lagrange::image::ImagePrecision::int8: return 1;
68 case lagrange::image::ImagePrecision::uint16: return 2;
69 case lagrange::image::ImagePrecision::uint32:
70 case lagrange::image::ImagePrecision::int32:
71 case lagrange::image::ImagePrecision::float32: return 4;
72 case lagrange::image::ImagePrecision::float64: return 8;
73 case lagrange::image::ImagePrecision::unknown:
74 default: return 0;
75 }
76}
77
78inline std::string precision_to_bin_header(image::ImagePrecision precision)
79{
80 if (image::ImagePrecision::int8 == precision) {
81 return "int8";
82 } else if (image::ImagePrecision::int32 == precision) {
83 return "int32";
84 } else if (image::ImagePrecision::float64 == precision) {
85 return "float64";
86 } else {
87 return "";
88 }
89}
90inline image::ImagePrecision bin_header_to_precision(const std::string& header)
91{
92 if ("int8" == header) {
93 return image::ImagePrecision::int8;
94 } else if ("int32" == header) {
95 return image::ImagePrecision::int32;
96 } else if ("float64" == header) {
97 return image::ImagePrecision::float64;
98 } else {
99 return image::ImagePrecision::unknown;
100 }
101}
102
103} // namespace image_io
104} // namespace lagrange
Main namespace for Lagrange.