/*
* Header: VZNL_Graphics.h
* Description:当前文件为伟景智能(Vizum)所研发的EyeCB板提供绘图函数接口。
* 目前提供了绘制矩形,圆形,线等方法
*
* Sample: // 在图像左上角绘制一个长宽各100像素的空心红色矩形。
* VZNLHANDLE hGraphics = VzNL_BeginPaint();
*
* SVzNLRect sRect = {0, 0, 100, 100};
* VzNL_DrawRect(hGraphics, &sRect, 0xffff0000, 0, 1);
*
* VzNL_EndPaint(hGraphics);
* Author: Mjw
* Date: 2018/08/28
*/
#ifndef __VIZUM_GRAPHICS_HEADER__
#define __VIZUM_GRAPHICS_HEADER__
#include "VZNL_Types.h"
#if defined(_WIN32)
#ifdef VZNL_GRAPHICS_EXPORTS
#ifdef __cplusplus
#define VZNL_GRAPHICS_API extern "C" __declspec(dllexport)
#else
#define VZNL_GRAPHICS_API __declspec(dllexport)
#endif
#else
#ifdef __cplusplus
#define VZNL_GRAPHICS_API extern "C" __declspec(dllimport)
#else
#define VZNL_GRAPHICS_API __declspec(dllimport)
#endif
#ifdef _DEBUG
#pragma comment(lib, "VzNLGraphicsd.lib")
#else
#pragma comment(lib, "VzNLGraphics.lib")
#endif
#endif
#else
#ifndef VZNL_GRAPHICS_API
#ifdef __cplusplus
#define VZNL_GRAPHICS_API extern "C" __attribute__((visibility("default")))
#else
#define VZNL_GRAPHICS_API __attribute__((visibility("default")))
#endif
#endif
#endif
/// @brief
/// 开始绘图
/// [in]传入数据buffer
/// @return 返回绘图工具handle
VZNL_GRAPHICS_API VZNLHANDLE VzNL_BeginPaint(SVzNLImageData* pImageData);
/// @brief
/// 绘制矩形
/// [in]绘图工具handle。
/// [in]要绘制的位置。
/// [in]边框颜色
/// [in]填充色
/// [in]边框宽度
/// @return 绘制完成返回true
VZNL_GRAPHICS_API int VzNL_DrawRect(VZNLHANDLE hHandle, const SVzNL2DPoint sPoint[4], unsigned long dwFrameColor, unsigned long dwFillColor, unsigned int nBorder);
/// @brief
/// 绘制多边形
/// [in]绘图工具handle。
/// [in]要绘制的位置。
/// [in]边框颜色
/// [in]填充色
/// [in]边框宽度
/// @return 绘制完成返回true
VZNL_GRAPHICS_API int VzNL_DrawPolygon(VZNLHANDLE hHandle, const SVzNL2DPoint* psPoint, const unsigned int nPtCount, unsigned long dwFrameColor, unsigned long dwFillColor, unsigned int nBorder);
/// @brief
/// 绘制圆形
/// [in]绘图工具handle。
/// [in]中点位置。
/// [in]半径。
/// [in]边框颜色
/// [in]填充色
/// [in]边框宽度
/// @return 绘制完成返回true
VZNL_GRAPHICS_API int VzNL_DrawCircle(VZNLHANDLE hHandle, const SVzNL2DPoint sPoint, int nRadius, unsigned long dwFrameColor, unsigned long dwFillColor, unsigned int nBorder);
/// @brief
/// 绘制椭圆
/// [in]绘图工具handle。
/// [in]中点位置。
/// [in]半径。
/// [in]边框颜色
/// [in]填充色
/// [in]边框宽度
/// @return 绘制完成返回true
VZNL_GRAPHICS_API int VzNL_DrawEllipe(VZNLHANDLE hHandle, const SVzNL2DPoint sPoint, unsigned long dwFrameColor, unsigned long dwFillColor, unsigned int nLongAxes, unsigned int nShortAxes, double angle, unsigned int nBorder);
/// @brief
/// 绘制直线
/// [in]绘图工具handle。
/// [in]直线的两个点位置。
/// @return 绘制完成返回true
VZNL_GRAPHICS_API int VzNL_DrawLine(VZNLHANDLE hHandle, unsigned long dwColor, const SVzNL2DPoint sPoint[2], unsigned int nBorder);
/// @brief
/// 绘制文字
/// [in]文字内容
/// [in]坐上起点
/// [in]字体大小
/// [in]字体颜色
VZNL_GRAPHICS_API int VzNL_DrawText(VZNLHANDLE hHandle, const char* text, SVzNL2DPoint& palce, int fontSize, unsigned long clrTxt);
/// @brief
/// 结束绘图
/// [in]绘图工具handle。
VZNL_GRAPHICS_API void VzNL_EndPaint(VZNLHANDLE hHandle);
/// @brief
/// 显示一个图像(linux因为版本比较繁杂,支持的界面库不同,所以这个函数linux目前不可用)
/// [in]窗口名
/// [in]压缩图像数据结构
VZNL_GRAPHICS_API void VzNL_ShowImage(const char* szWindowName, const SVzNLImageData* pImageData);
/// @brief
/// 存储图像。
/// [in]文件全路径
/// [in]压缩图像数据结构
/// @return 成功返回0,失败返回错误码
VZNL_GRAPHICS_API int VzNL_SaveImage(const char* szFileName, const SVzNLImageData* pImageData);
/// @brief
/// 存储图像。
/// [in]文件全路径
/// [in]压缩图像数据结构
/// @return 成功返回0,失败返回错误码
VZNL_GRAPHICS_API int VzNL_SaveScaleImage(const char* szFileName, SVzNLImageData* pImageData, SVzVideoResolution* psResolution);
/// @brief
/// 压缩图片
/// [in]绘图工具handle。
/// [in]压缩类型。
/// [in]数据源(无压缩)。
/// [out]压缩后的数据。
/// @return 成功返回0,失败返回错误码
VZNL_GRAPHICS_API int VzNL_CompressImage(EVzNLImageCompress eCompress, SVzNLImageData* pSrc, SVzNLCompressData** pDst);
/// @brief
/// 释放压缩图片
VZNL_GRAPHICS_API void VzNL_ReleaseCompressImage(SVzNLCompressData** pDst);
#endif // __VIZUM_GRAPHICS_HEADER__