Program Listing for File image.h#
↰ Return to documentation for file (public/image.h
)
#ifndef f3d_image_h
#define f3d_image_h
#include "exception.h"
#include "export.h"
#include <filesystem>
#include <string>
#include <vector>
namespace f3d
{
class F3D_EXPORT image
{
public:
enum class SaveFormat : unsigned char
{
PNG,
JPG,
TIF,
BMP
};
enum class ChannelType : unsigned char
{
BYTE,
SHORT,
FLOAT
};
explicit image(const std::filesystem::path& filePath);
image(unsigned int width, unsigned int height, unsigned int channelCount,
ChannelType type = ChannelType::BYTE);
image();
~image();
image(const image& img);
image& operator=(const image& img) noexcept;
image(image&& img) noexcept;
image& operator=(image&& img) noexcept;
[[nodiscard]] bool operator==(const image& reference) const;
[[nodiscard]] bool operator!=(const image& reference) const;
[[nodiscard]] std::vector<double> getNormalizedPixel(const std::pair<int, int>& xy) const;
[[nodiscard]] static std::vector<std::string> getSupportedFormats();
[[nodiscard]] unsigned int getWidth() const;
[[nodiscard]] unsigned int getHeight() const;
[[nodiscard]] unsigned int getChannelCount() const;
[[nodiscard]] ChannelType getChannelType() const;
[[nodiscard]] unsigned int getChannelTypeSize() const;
image& setContent(void* buffer);
[[nodiscard]] void* getContent() const;
double compare(const image& reference) const;
const image& save(
const std::filesystem::path& filePath, SaveFormat format = SaveFormat::PNG) const;
[[nodiscard]] std::vector<unsigned char> saveBuffer(SaveFormat format = SaveFormat::PNG) const;
const image& toTerminalText(std::ostream& stream) const;
[[nodiscard]] std::string toTerminalText() const;
f3d::image& setMetadata(std::string key, std::string value);
[[nodiscard]] std::string getMetadata(const std::string& key) const;
[[nodiscard]] std::vector<std::string> allMetadata() const;
struct write_exception : public exception
{
explicit write_exception(const std::string& what = "");
};
struct read_exception : public exception
{
explicit read_exception(const std::string& what = "");
};
struct metadata_exception : public exception
{
explicit metadata_exception(const std::string& what = "");
};
private:
class internals;
internals* Internals;
};
}
#endif