TAG:
MiniGUI 提供的 YUV 覆盖操作函数原型如下: /***************************** YUV overlay support ***************************/ /* 最常见的视频覆盖格式. */ #define GAL_YV12_OVERLAY 0x32315659 /* Planar mode: Y + V + U (3 planes) */ #define GAL_IYUV_OVERLAY 0x56555949 /* Planar mode: Y + U + V (3 planes) */ #define GAL_YUY2_OVERLAY 0x32595559 /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ #define GAL_UYVY_OVERLAY 0x59565955 /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ #define GAL_YVYU_OVERLAY 0x55595659 /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ /* 该函数创建一个视频输出覆盖 */ GAL_Overlay* GUIAPI CreateYUVOverlay (int width, int height, Uint32 format, HDC hdc); /* 锁定覆盖进行直接的缓冲区读写,结束后解锁 */ int GAL_LockYUVOverlay (GAL_Overlay *overlay); void GAL_UnlockYUVOverlay (GAL_Overlay *overlay); #define LockYUVOverlay GAL_LockYUVOverlay #define UnlockYUVOverlay GAL_UnlockYUVOverlay /* 释放视频覆盖 */ void GAL_FreeYUVOverlay (GAL_Overlay *overlay); #define FreeYUVOverlay GAL_FreeYUVOverlay /* 将视频覆盖传送到指定 DC 设备上。该函数能够进行 2 维缩放 */ void GUIAPI DisplayYUVOverlay (GAL_Overlay* overlay, const RECT* dstrect); 有关视频格式的信息,可参见: http://www.webartz.com/fourcc/indexyuv.htm 有关颜色空间的相互关系的息,可参见: http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html 7.2 Gamma 校正 Gamma 校正通过为 RGB 颜色空间的每个颜色通道设置 Gamma 因子,来动态调整 RGB 显示器上的实际 RGB 效果。需要注意的是,Gamma 校正需要显示芯片的硬件支持。 应用程序可以通过 SetGamma 函数设置 RGB 三个颜色通道的 Gamma 校正值。该函数原型如下: int GAL_SetGamma (float red, float green, float blue); #define SetGamma GAL_SetGamma 线性 Gamma 校正值的范围在 0.1 到 10.0 之间。如果硬件不支持 Gamma 校正,该函数将返回 -1。 应用程序也可以通过 SetGammaRamp 函数设置 RGB 三个颜色通道的非线性 Gamma 校正值。该函数原型如下: int GAL_SetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue); #define SetGammaRamp GAL_SetGammaRamp int GAL_GetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue); #define GetGammaRamp GAL_GetGammaRamp 函数 SetGammaRamp 实际设置的是每个颜色通道的 Gamma 转换表,每个表由 256 个值组成,表示设置值和实际值之间的对应关系。当设置屏幕上某个象素的 RGB 分别为 R、G、B 时,实际在显示器上获得的象素 RGB 值分别为:red[R]、green[G]、blue[B]。如果硬件不支持 Gamma 校正,该函数将返回 -1。 函数 GetGammaRamp 获得当前的 Gamma 转换表。 Gamma 校正的最初目的,是为了能够在显示器上精确还原一副图片。Gamma 值在某种程度上表示的是某个颜色通道的对比度变化。但 Gamma 在多媒体和游戏程序中有一些特殊用途――通过 Gamma 校正,可以方便地获得对比度渐进效果。 8 小结 本文描述了自 MiniGUI 1.1.0Pre4 版本发布以来新增的 GDI 接口。这些接口涉及到曲线和填充生成器、复杂曲线的绘制、封闭曲线填充、复杂区域的创建、直接访问 FrameBuffer、YUV 覆盖和 Gamma 校正等等。通过本文的介绍,相信读者能够对 MiniGUI 的新 GDI 接口有一个更加全面的认识。 (warsour) |