Zivid C++ API 2.18.0+1b44dbef-1
Image.h
Go to the documentation of this file.
1/*******************************************************************************
2 * This file is part of the Zivid API
3 *
4 * Copyright 2015-2026 (C) Zivid AS
5 * All rights reserved.
6 *
7 * Zivid Software License, v1.0
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of Zivid AS nor the names of its contributors may be used
20 * to endorse or promote products derived from this software without specific
21 * prior written permission.
22 *
23 * 4. This software, with or without modification, must not be used with any
24 * other 3D camera than from Zivid AS.
25 *
26 * 5. Any software provided in binary form under this license must not be
27 * reverse engineered, decompiled, modified and/or disassembled.
28 *
29 * THIS SOFTWARE IS PROVIDED BY ZIVID AS "AS IS" AND ANY EXPRESS OR IMPLIED
30 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
31 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
32 * DISCLAIMED. IN NO EVENT SHALL ZIVID AS OR CONTRIBUTORS BE LIABLE FOR ANY
33 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
36 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Contact: Zivid Customer Success Team <customersuccess@zivid.com>
41 * Info: http://www.zivid.com
42 ******************************************************************************/
43
44#pragma once
45
46#include "Zivid/Array2D.h"
47#include "Zivid/Color.h"
49
50#include <string>
51#include <type_traits>
52
53namespace Zivid
54{
55#ifndef NO_DOC
57 namespace Detail
58 {
59 template<typename T>
60 class LoadImageTag
61 {};
62
63 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorRGBA> &image, const std::string &fileName);
64 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorBGRA> &image, const std::string &fileName);
65 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorRGBA_SRGB> &image, const std::string &fileName);
66 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorBGRA_SRGB> &image, const std::string &fileName);
67 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorRGB> &image, const std::string &fileName);
68 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorRGB_SRGB> &image, const std::string &fileName);
69 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorBGR> &image, const std::string &fileName);
70 ZIVID_CORE_EXPORT void saveImageImpl(const Zivid::Array2D<ColorBGR_SRGB> &image, const std::string &fileName);
71 ZIVID_CORE_EXPORT Zivid::Image<ColorBGRA> loadImageImpl(
72 const std::string &fileName,
73 LoadImageTag<ColorBGRA> /* tag */);
74 ZIVID_CORE_EXPORT Zivid::Image<ColorRGBA> loadImageImpl(
75 const std::string &fileName,
76 LoadImageTag<ColorRGBA> /* tag */);
77 ZIVID_CORE_EXPORT Zivid::Image<ColorRGBA_SRGB> loadImageImpl(
78 const std::string &fileName,
79 LoadImageTag<ColorRGBA_SRGB> /* tag */);
80 ZIVID_CORE_EXPORT Zivid::Image<ColorBGRA_SRGB> loadImageImpl(
81 const std::string &fileName,
82 LoadImageTag<ColorBGRA_SRGB> /* tag */);
83 ZIVID_CORE_EXPORT Zivid::Image<ColorRGB> loadImageImpl(
84 const std::string &fileName,
85 LoadImageTag<ColorRGB> /* tag */);
86 ZIVID_CORE_EXPORT Zivid::Image<ColorRGB_SRGB> loadImageImpl(
87 const std::string &fileName,
88 LoadImageTag<ColorRGB_SRGB> /* tag */);
89 ZIVID_CORE_EXPORT Zivid::Image<ColorBGR> loadImageImpl(
90 const std::string &fileName,
91 LoadImageTag<ColorBGR> /* tag */);
92 ZIVID_CORE_EXPORT Zivid::Image<ColorBGR_SRGB> loadImageImpl(
93 const std::string &fileName,
94 LoadImageTag<ColorBGR_SRGB> /* tag */);
95
96 template<typename ColorFormat>
97 struct SupportedImageColorFormat : std::false_type
98 {};
99
100 template<>
101 struct SupportedImageColorFormat<ColorRGBA> : std::true_type
102 {};
103
104 template<>
105 struct SupportedImageColorFormat<ColorBGRA> : std::true_type
106 {};
107
108 template<>
109 struct SupportedImageColorFormat<ColorRGBA_SRGB> : std::true_type
110 {};
111
112 template<>
113 struct SupportedImageColorFormat<ColorBGRA_SRGB> : std::true_type
114 {};
115
116 template<>
117 struct SupportedImageColorFormat<ColorRGB> : std::true_type
118 {};
119
120 template<>
121 struct SupportedImageColorFormat<ColorRGB_SRGB> : std::true_type
122 {};
123
124 template<>
125 struct SupportedImageColorFormat<ColorBGR> : std::true_type
126 {};
127
128 template<>
129 struct SupportedImageColorFormat<ColorBGR_SRGB> : std::true_type
130 {};
131 } // namespace Detail
132#endif
139 template<class PixelFormat>
140 class Image : public Array2D<PixelFormat>
141 {
142 public:
143 static_assert(
144 Detail::SupportedImageColorFormat<PixelFormat>::value,
145 "PixelFormat must be Zivid::ColorRGBA, Zivid::ColorBGRA, Zivid::ColorRGBA_SRGB, Zivid::ColorBGRA_SRGB, "
146 "Zivid::ColorRGB, Zivid::ColorRGB_SRGB, Zivid::ColorBGR, or Zivid::ColorBGR_SRGB");
147
149 Image() = default;
150
152 template<typename Iterator>
153 Image(const Resolution &resolution, Iterator beginIt, Iterator endIt)
154 : Array2D<PixelFormat>(resolution, beginIt, endIt)
155 {}
156
170 Image(const Resolution &resolution, const unsigned char *begin, const unsigned char *end)
171 : Array2D<PixelFormat>{ resolution, begin, end }
172
173 {}
174
180 explicit Image(const std::string &fileName)
181 : Image{ Detail::loadImageImpl(fileName, Detail::LoadImageTag<PixelFormat>{}) }
182
183 {}
184
187 {
189 }
190
193 void save(const std::string &fileName) const
194 {
195 return Detail::saveImageImpl(*this, fileName);
196 }
197
198#ifndef NO_DOC
199 explicit Image(Array2D<PixelFormat> &&a)
200 : Array2D<PixelFormat>(std::move(a))
201 {}
202#endif
203 };
204} // namespace Zivid
#define ZIVID_CORE_EXPORT
Definition CoreExport.h:56
Two-dimensional container of data.
Definition Array2D.h:83
size_t height() const
Get the height of the array (number of rows)
Definition Array2D.h:106
ConstIterator end() const
Definition Array2D.h:174
size_t width() const
Get the width of the array (number of columns)
Definition Array2D.h:100
ConstIterator begin() const
Definition Array2D.h:168
Array2D()
Definition Array2D.h:94
A 2-dimensional image.
Definition Image.h:141
void save(const std::string &fileName) const
Save the image to a file. The supported file types are PNG (.png), JPEG (.jpg, .jpeg) and BMP (....
Definition Image.h:193
Image(const Resolution &resolution, const unsigned char *begin, const unsigned char *end)
Create an image from an unsigned char byte buffer.
Definition Image.h:170
Image()=default
Create an empty image.
Image(const std::string &fileName)
Load an image from a file.
Definition Image.h:180
Image(const Resolution &resolution, Iterator beginIt, Iterator endIt)
Create an image from a buffer of elements by copy.
Definition Image.h:153
Resolution resolution() const
Get the resolution of the image.
Definition Image.h:186
Class describing a resolution with a width and a height.
Definition Resolution.h:56
Definition EnvironmentInfo.h:74
The main Zivid namespace. All Zivid code is found here.
Definition Application.h:85
ColorSRGB ColorRGBA_SRGB
Color with 8-bit red, green, blue and alpha channels in the sRGB color space.
Definition Color.h:93