⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdi.h

📁 MINIGUI 加UCOS 很好的源代码 找了好久才找到了 拿出来与大家一起分享!
💻 H
📖 第 1 页 / 共 5 页
字号:
 * \fn BOOL GUIAPI SetMemDCColorKey (HDC mem_dc, DWORD flags, Uint32 color_key)
 * \brief Sets the color key (transparent pixel) of a memory DC.
 *
 * This function sets the color key (transparent pixel) of the memory DC \a mem_dc.
 * If \a flags is MEMDC_FLAG_SRCCOLORKEY (optionally OR'ed with MEMDC_FLAG_RLEACCEL),
 * \a color_key will be the transparent pixel in the source DC of a blit.
 * MEMDC_FLAG_RLEACCEL requests RLE acceleration for the source of the DC if present,
 * and removes RLE acceleration if absent. If \a flags is 0, this function clears 
 * any current color key.
 *
 * \param mem_dc The device context.
 * \param flags The color key specific memory DC flags.
 * \param color_key the color_key of the memory DC.
 * \return TRUE on success, otherwise FALSE.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa SetMemDCAlpha
 */
BOOL GUIAPI SetMemDCColorKey (HDC mem_dc, DWORD flags, Uint32 color_key);

/**
 * \fn void GUIAPI DeleteMemDC (HDC mem_dc)
 * \brief Deletes a memory DC.
 *
 * This function deletes the memory DC \a mem_dc, and frees the surface of the DC.
 * For the memory DC created from BITMAP object or MYBITMAP object, the bits used
 * by the surface of the DC will be reserved.
 *
 * \param mem_dc The device context to be deleted.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa CreateMemDC, CreateMemDCFromBitmap, CreateMemDCFromMyBitmap
 */
void GUIAPI DeleteMemDC (HDC mem_dc);

/**
 * \def CreateCompatibleDC(hdc)
 * \brief Creates a memory DC which is compatible with a given DC.
 *
 * This function creates a memory DC fully compatible with the reference 
 *        DC \a hdc, including pixel format and geomatry.
 *
 * \param hdc The reference DC.
 * \return The handle to the memory DC, HDC_INVALID indicates an error.
 *
 * \note Only defined as macro calling \a CreateCompatibleDCEx for _USE_NEWGAL. 
 *       If _USE_NEWGAL is not defined, \a CreateCompatibleDC is defined as 
 *       a function, and have the same semantics as this macro.
 *
 * \sa CreateCompatibleDCEx, DeleteMemDC
 */
#define CreateCompatibleDC(hdc) CreateCompatibleDCEx(hdc, 0, 0);

/**
 * \def DeleteCompatibleDC(hdc)
 * \brief Deletes a memory DC.
 *
 * This function deletes a memory DC created by \a CreateCompatibleDC.
 *
 * \param hdc The device context to be deleted.
 *
 * \note Only defined as macro calling \a DeleteMemDC for _USE_NEWGAL. 
 *       If _USE_NEWGAL is not defined, \a DeleteCompatibleDC is defined 
 *       as a function, and have the same semantics as this macro.
 *
 * \sa CreateCompatibleDC, DeleteMemDC
 */
#define DeleteCompatibleDC(hdc) DeleteMemDC(hdc)

/**
 * \fn Uint8* GUIAPI LockDC (HDC hdc, const RECT* rw_rc, int* width, int* height, int* pitch)
 * \brief Locks a dc to get direct access to pixels in the DC.
 *
 * Calling this function will try to lock the DC \a hdc to directly access the pixels
 * of the DC. You should tell this function the rectangle to be accessed, and the function
 * will return the effective \a width, \a height and \a pitch of the DC. The access 
 * beyond effective width and height will be invalid. 
 *
 * Locking a DC which uses screen surface will lock some global objects, such as mouse
 * cursor, and so on. All GDI calls of other threads (in MiniGUI-Threads) or other process 
 * (in MiniGUI-Lite) will be blocked as well. So you should call \a UnlockDC to unlock 
 * the DC as soon as possible, and should not call any system function in the duration of 
 * locking the DC.
 *
 * \param hdc The handle to the device context.
 * \param rw_rc The rectangle in device coordinate system to be accessed in the DC.
 * \param width The width of the effective rectangle can access will be returned through 
 *        this pointer.
 * \param height The height of the effective rectangle can access will be returned through 
 *        this pointer.
 * \param pitch The pitch of the scan line of the DC will be returned through this pointer.
 *        Pitch means the length of the scan line in bytes.
 * \return The bits pointer to the upper-left corner of the effective rectangle, NULL on error.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa UnlockDC
 *
 * Example:
 *
 * \include lockdc.c
 */
Uint8* GUIAPI LockDC (HDC hdc, const RECT* rw_rc, int* width, int* height, int* pitch);

/**
 * \fn void GUIAPI UnlockDC (HDC hdc)
 * \brief Unlocks a locked DC.
 *
 * \param hdc The locked DC.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa LockDC
 */
void GUIAPI UnlockDC (HDC hdc);

   /**
    * \defgroup yuv_fns YUV overlay operations
    *
    * For an explanation of common video overlay formats, see:
    *
    * http://www.webartz.com/fourcc/indexyuv.htm
    *
    * For information on the relationship between color spaces, see:
    *
    * http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html
    *
    * @{
    */

#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) */

/**
 * The YUV hardware video overlay
 */
typedef struct GAL_Overlay {
    /** The overlay format, read-only */
    Uint32 format;
    /** The width of the overlay, read-only */
    int w;
    /** The height of the overlay, read-only */
    int h;
    /** The number of the planes of the overlay, read-only */
    int planes;
    /** The pitches of planes, read-only */
    Uint16 *pitches;
    /** The YUV pixels of planse, read-write */
    Uint8 **pixels;

    /* Hardware-specific surface info */
    struct private_yuvhwfuncs *hwfuncs;
    struct private_yuvhwdata *hwdata;

    /** Does This overlay hardware accelerated? */
    Uint32 hw_overlay :1;
    Uint32 UnusedBits :31;
} GAL_Overlay;

/**
 * \fn GAL_Overlay* GUIAPI CreateYUVOverlay (int width, int height, Uint32 format, HDC hdc)
 * \brief Creates a video output overlay on a DC.
 *
 * This function creates a video output overlay on the given DC \a hdc.
 * Calling the returned surface an \a overlay is something of a misnomer because
 * the contents of the display DC \a hdc underneath the area where the overlay
 * is shown is undefined - it may be overwritten with the converted YUV data.
 *
 * \param width The expected width of the video overlay.
 * \param height The expected height of the video overlay.
 * \param format The expected video overlay format, can be one of the following values:
 *
 *      - GAL_YV12_OVERLAY\n
 *        Planar mode: Y + V + U  (3 planes)
 *      - GAL_IYUV_OVERLAY\n
 *        Planar mode: Y + U + V  (3 planes)
 *      - GAL_YUY2_OVERLAY\n
 *        Packed mode: Y0+U0+Y1+V0 (1 plane)
 *      - GAL_UYVY_OVERLAY\n
 *        Packed mode: U0+Y0+V0+Y1 (1 plane)
 *      - GAL_YVYU_OVERLAY\n
 *        Packed mode: Y0+V0+Y1+U0 (1 plane)
 *
 * \param hdc The device context.
 * \return A GAL_Overlay object on success, NULL on error.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_LockYUVOverlay, GAL_FreeYUVOverlay, http://www.webartz.com/fourcc/indexyuv.htm
 */
GAL_Overlay* GUIAPI CreateYUVOverlay (int width, int height,
                Uint32 format, HDC hdc);

/**
 * \fn int GAL_LockYUVOverlay (GAL_Overlay *overlay)
 * \brief Locks an overlay for direct access.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_UnlockYUVOverlay
 */
int GAL_LockYUVOverlay (GAL_Overlay *overlay);

/**
 * \fn void GAL_UnlockYUVOverlay (GAL_Overlay *overlay)
 * \brief Unlocks a locked overlay when you are done
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_LockYUVOverlay
 */
void GAL_UnlockYUVOverlay (GAL_Overlay *overlay);

/**
 * \def LockYUVOverlay
 * \brief Is an alias of \a GAL_LockYUVOverlay
 * \sa GAL_LockYUVOverlay
 */
#define LockYUVOverlay GAL_LockYUVOverlay

/**
 * \def UnlockYUVOverlay
 * \brief Is an alias of \a GAL_UnlockYUVOverlay
 * \sa GAL_UnlockYUVOverlay
 */
#define UnlockYUVOverlay GAL_UnlockYUVOverlay

/**
 * \fn void GAL_FreeYUVOverlay (GAL_Overlay *overlay)
 * \brief Frees a YUV overlay.
 *
 * This function frees a YUV overlay created by \a GAL_CreateYUVOverlay.
 *
 * \param overlay The video overlay to be freed.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_CreateYUVOverlay
 */
void GAL_FreeYUVOverlay (GAL_Overlay *overlay);

/**
 * \def FreeYUVOverlay
 * \brief Is an alias of \a GAL_FreeYUVOverlay
 * \sa GAL_FreeYUVOverlay
 */
#define FreeYUVOverlay GAL_FreeYUVOverlay

/**
 * \fn void GUIAPI DisplayYUVOverlay (GAL_Overlay* overlay, const RECT* dstrect)
 * \brief Blits a video overlay to the screen.
 *
 * Calling this function will blit the video overly \a overlay to the screen. 
 * The contents of the video surface underneath the blit destination are
 * not defined. The width and height of the destination rectangle may be 
 * different from that of the overlay, but currently only 2x scaling is supported.
 * And note that the \a dstrect is in screen coordinate system.
 *
 * \param overlay The video overlay to be displayed.
 * \param dstrect The destination rectangle. It may be different from that of 
 *        the overlay, but currently only 2x scaling is supported
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_CreateYUVOverlay, GAL_LockYUVOverlay
 */
void GUIAPI DisplayYUVOverlay (GAL_Overlay* overlay, const RECT* dstrect);

    /** @} end of yuv_fns */

    /**
     * \defgroup gamma_fns Gamma correction functions
     * @{
     */

/**
 * \fn int GAL_SetGamma (float red, float green, float blue)
 * \brief Sets the gamma correction for each of the color channels.
 *
 * This function sets the gamma correction for each of the color channels.
 * The gamma values range (approximately) between 0.1 and 10.0.
 * If this function isn't supported directly by the hardware, it will
 * be emulated using gamma ramps, if available. 
 *
 * \param red The gamma correction value of red channel.
 * \param green The gamma correction value of green channel.
 * \param blue The gamma correction value of blue channel.
 * \return If successful, this function returns 0, otherwise it returns -1.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_SetGammaRamp
 */
int GAL_SetGamma (float red, float green, float blue);

/**
 * \def SetGamma
 * \brief Is an alias of \a GAL_SetGamma
 * \sa GAL_SetGamma
 */
#define SetGamma GAL_SetGamma

/**
 * \fn int GAL_SetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue)
 * \brief Sets the gamma translation table for the red, green, and blue channels of the video hardware.  
 *
 * This function sets the gamma translation table for the red, green, and blue channels of the video hardware.  
 * Each table is an array of 256 16-bit quantities, representing a mapping 
 * between the input and output for that channel. The input is the index into 
 * the array, and the output is the 16-bit gamma value at that index, scaled 
 * to the output color precision.
 * 
 * You may pass NULL for any of the channels to leave it unchanged.
 *
 * \param red The gamma translation table for the red channel.
 * \param green The gamma translation table for the green channel.
 * \param blue The gamma translation table for the blue channel.
 * \return If the call succeeds, it will return 0. If the display driver or hardware does 
 * not support gamma translation, or otherwise fails, this function will return -1.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_GetGammaRamp, GAL_SetGamma
 */
int GAL_SetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue);

/**
 * \def SetGammaRamp
 * \brief Is an alias of \a GAL_SetGammaRamp
 * \sa GAL_SetGammaRamp
 */
#define SetGammaRamp GAL_SetGammaRamp

/**
 * \fn int GAL_GetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue)
 * \brief Retrieves the current values of the gamma translation tables.
 * 
 * This function retrives the current values of the gamma translationn tables.
 * You must pass in valid pointers to arrays of 256 16-bit quantities.
 * Any of the pointers may be NULL to ignore that channel.
 *
 * \param red Pointers to the array of gamma translation tables for the red channel.
 * \param green Pointers to the array of gamma translation tables for the green channel.
 * \param blue Pointers to the array of gamma translation tables for the blue channel.
 * \return If the call succeeds, it will return 0. If the display driver or
 *         hardware does not support gamma translation, or otherwise fails, 
 *         this function will return -1.
 *
 * \note Only defined for _USE_NEWGAL.
 *
 * \sa GAL_SetGammaRamp
 */
int GAL_GetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue);

/**
 * \def GetGammaRamp
 * \brief Is an alias of \a GAL_GetGammaRamp
 * \sa GAL_GetGammaRamp
 */
#define GetGammaRamp GAL_GetGammaRamp

    /** @} end of gamma_fns */

#else

HDC GUIAPI CreateCompatibleDC (HDC hdc);
void GUIAPI DeleteCompatibleDC (HDC hdc);

#endif /* _USE_NEWGAL */

    /** @} end of dc_fns */

    /**
     * \defgroup dc_attrs DC attribute operations
     * @{
     */

#define BM_TRANSPARENT          1
#define BM_OPAQUE               0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -