#ifndef __TYPE_DEF_H__
#define __TYPE_DEF_H__


// *****************************************************************************
// 版权所有(C)2023~2099 上海骄成超声波技术有限公司
// 保留所有权利
// *****************************************************************************
// 作者 : 李祥瑞
// 版本 : 1.0
// 代码创建日期:2024/11/19
// 版本更新日期:2025/01/10
// 功能说明: 定位算法接口使用的基本数据结构
// *****************************************************************************

#if defined(JVISION_LIB_EXPORT)
#define JVision_API __declspec(dllexport)
#else
#define JVision_API __declspec(dllimport)
#endif

#include <string>
#define M_PI (3.14159256)

namespace JVision
{
	// 图像数据类型,指向内存中的图像二进制数据
	typedef JVision_API unsigned char* ImageDataPtr;
	// 返回值类型
	typedef JVision_API int ResultCode;
	// 参数ID类型
	typedef JVision_API int ParamID;
	// 参数值类型
	typedef JVision_API std::string ParamVal;

	/**
	 * @brief 以像素点表示的坐标
	 */
	struct JVision_API Point
	{
		double x;//(像素坐标,零点在左上角)
		double y;
		double angle; // 角度(x正方向为0,逆时针为正)
	};

	struct JVision_API Point2D
	{
		double x;//(像素坐标,零点在左上角)
		double y;
	};

	struct JVision_API CircleResult
	{
		double x;
		double y;
		double radius;
	};

	enum class JVision_API ImageFormat : int
	{
		INVALID = 0,    // 无效

		GRAY8,          // 灰度图,色值0~255
		RGB888,         // 每个像素 24 位,顺序是 0xRRGGBB,没有 Alpha 通道
		ARGB32,         // 带有 Alpha 通道的 32 位像素格式,顺序是 0xAARRGGBB
		RGB32,          // 每个像素 32 位,其中包含了 RGB 颜色信息,顺序通常是 0xAARRGGBB(最高字节为 Alpha 通道,但被忽略,因为 Alpha 通道总是视为 0xFF)
		YUV422,         // YUV4:2:2
	};

	struct JVision_API ImageInfo
	{
		ImageInfo();
		ImageInfo(int w, int h, int c, ImageFormat f, unsigned char* d);
		ImageInfo(unsigned char* d, int w, int h, int c)
			: width(w)
			, height(h)
			, channel(c)
			, data(nullptr)
		{
			int imageSize = w * h * c;
			data = new unsigned char[imageSize];
			memcpy(data, d, imageSize);
		}

		ImageInfo(const ImageInfo& other);
		ImageInfo(ImageInfo&& other) noexcept;
		ImageInfo& operator=(ImageInfo& other);
		ImageInfo& operator=(ImageInfo&& other) noexcept;
		~ImageInfo();

		int width;				// 图像宽度
		int height;				// 图像高度
		int channel;			// 图像通道数
		ImageFormat format;		// 图像格式
		unsigned char* data;	// 图像数据
	};
}

#endif