/////////////////////////////////////////////////////////////////////////////
// Name: wx/imagwebp.h
// Purpose: wxImage WebP handler
// Author: Hermann Höhne
// Created: 2024-03-08
// Copyright: (c) Hermann Höhne
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_IMAGWEBP_H_
#define _WX_IMAGWEBP_H_
#include "wx/defs.h"
#if wxUSE_LIBWEBP
#include "wx/colour.h"
#include "wx/image.h"
#include "wx/versioninfo.h"
//-----------------------------------------------------------------------------
// wxWEBPHandler
//-----------------------------------------------------------------------------
namespace wxWebPImageFormat
{
enum wxWebPImageFormat : int
{
Undefined = 0,
Lossy = 1,
Lossless = 2
};
}
#define wxIMAGE_OPTION_WEBP_QUALITY wxS("WebPQuality")
#define wxIMAGE_OPTION_WEBP_FORMAT wxS("WebPFormat")
struct wxWebPAnimationFrame
{
wxImage image;
wxColour bgColour;
int duration = 0;
};
class WXDLLIMPEXP_CORE wxWEBPHandler : public wxImageHandler
{
public:
wxWEBPHandler()
{
m_name = wxS("WebP file");
m_extension = wxS("webp");
m_type = wxBITMAP_TYPE_WEBP;
m_mime = wxS("image/webp");
}
static wxVersionInfo GetLibraryVersionInfo();
#if wxUSE_STREAMS
virtual bool LoadFile(wxImage* image, wxInputStream& stream, bool verbose = true, int index = -1) override;
virtual bool SaveFile(wxImage* image, wxOutputStream& stream, bool verbose = true) override;
virtual bool LoadAnimation(std::vector<wxWebPAnimationFrame>& frames, wxInputStream& stream, bool verbose = true);
protected:
virtual bool DoCanRead(wxInputStream& stream) override;
virtual int DoGetImageCount(wxInputStream& stream) override;
#endif // wxUSE_STREAMS
private:
wxDECLARE_DYNAMIC_CLASS(wxWEBPHandler);
};
#endif // wxUSE_LIBWEBP
#endif // _WX_IMAGWEBP_H_