📄 frameimage.c
字号:
/*===========================================================================
包明辉 CFrameImage .贴图代码
FILE: FrameImage.c
===========================================================================*/
#include "FrameImage.h"
CFrameImage* CFrameImage_New(AEEApplet* pme)//
{
CFrameImage* pFrameImageRet = NULL;
pFrameImageRet = MALLOC(sizeof(CFrameImage));
if(NULL == pFrameImageRet)
return NULL;
MEMSET(pFrameImageRet , 0 , sizeof(CFrameImage));
pFrameImageRet->m_pme = pme;
return pFrameImageRet;
}
CFrameImage* CFrameImage_NewEx(AEEApplet* pme , const char* pResFile , uint16 nResID , uint32 nFrame)
{
CFrameImage* pFrameImageRet = NULL;
boolean bRet;
pFrameImageRet = CFrameImage_New(pme);
if(NULL == pFrameImageRet)
return NULL;
bRet = CFrameImage_SetImage(pFrameImageRet , pResFile , nResID , nFrame);
if(FALSE == bRet)
{
FRAMEIMAGE_FREE(pFrameImageRet);
return NULL;
}
return pFrameImageRet;
}
void CFrameImage_Release(CFrameImage** pFree)
{
if(pFree && *pFree)
{
BREW_FREE((*pFree)->m_pBitMap);
FREEIF(*pFree);
*pFree = NULL;
}
}
void CFrameImage_ClearImage(CFrameImage* pFrameImage)
{
if(NULL == pFrameImage)
return;
if(NULL != pFrameImage->m_pBitMap)
IBITMAP_Release(pFrameImage->m_pBitMap);
pFrameImage->m_pBitMap = NULL;
pFrameImage->m_nCx = 0;
pFrameImage->m_nCy = 0;
pFrameImage->m_nFrames = 0;
}
boolean CFrameImage_SetImage(CFrameImage* pFrameImage , const char* pResFile , uint16 nResID , uint32 nFrame)//Y
{
AEEBitmapInfo tagInfo;//新建的bitmap信息
IImage* pImage;//载入的资源图片.png图片
IBitmap* pBitMap;//从pImage转换的BitMap
int nret;//接受IBITMAP_GetInfo的返回数值可以判断建立的BitMap是否正常
if(NULL == pFrameImage || NULL == pResFile )
return FALSE;
if(0 == nFrame)
return FALSE;
MEMSET(&tagInfo , 0 , sizeof(AEEBitmapInfo));
pImage = ISHELL_LoadResImage(pFrameImage->m_pme->m_pIShell , pResFile , nResID);
pBitMap = GetBmpFromImg(pFrameImage->m_pme , pImage);
if(NULL == pBitMap)
return FALSE;
BREW_FREE(pImage);
nret = IBITMAP_GetInfo(pBitMap , &tagInfo , sizeof(AEEBitmapInfo));
if(EUNSUPPORTED == nret)
{
BREW_FREE(pBitMap);
return FALSE;
}
BREW_FREE(pFrameImage->m_pBitMap);
pFrameImage->m_pBitMap = pBitMap;
pFrameImage->m_nCy = tagInfo.cy;
pFrameImage->m_nCx = tagInfo.cx;
pFrameImage->m_nFrames = nFrame;
return TRUE;
}
void CFrameImage_Draw(CFrameImage* pFrameImage , uint32 nFrame , int nX , int nY)
{
uint32 nFrameY = 0;//单帧高度
int nDex = 0 , nDey= 0;
if(NULL == pFrameImage)
return;
if(nFrame > pFrameImage->m_nFrames)
return;
nFrameY = pFrameImage->m_nCy / pFrameImage->m_nFrames;//图象高度锄帧数
nDex = 0;
nDey = nFrameY * nFrame;
IDISPLAY_BitBlt(pFrameImage->m_pme->m_pIDisplay , nX , nY , (int)pFrameImage->m_nCx , (int)nFrameY , (void*)pFrameImage->m_pBitMap , nDex , nDey , AEE_RO_TRANSPARENT);
}
int CFrameImage_GetFrameY(CFrameImage* pFrameImage)
{
uint32 nRet;
if(NULL == pFrameImage)
return 0;
nRet = pFrameImage->m_nCy / pFrameImage->m_nFrames;
return (int)nRet;
}
//工具函数
IBitmap *GetBmpFromImg(AEEApplet * po, IImage *pImage)
{
IBitmap *pBitmap, *pDev;
AEEImageInfo AEEII;
NativeColor color;
pBitmap = NULL;
pDev = NULL;
if(pImage == NULL)
return NULL;
IIMAGE_GetInfo(pImage, &AEEII);
IDISPLAY_GetDeviceBitmap(po->m_pIDisplay, &pDev);
if(NULL == pDev)
return NULL;
IBITMAP_CreateCompatibleBitmap(pDev, &pBitmap, AEEII.cx, AEEII.cy);
IBITMAP_Release(pDev);
if(NULL == pBitmap)
return NULL;
IDISPLAY_SetDestination(po->m_pIDisplay, pBitmap);
IIMAGE_Draw(pImage, 0, 0);
IDISPLAY_SetDestination(po->m_pIDisplay, NULL);
//色透明色255 0 255
color = IBITMAP_RGBToNative(pBitmap, MAKE_RGB(255,0,255));
IBITMAP_SetTransparencyColor(pBitmap, color);
return pBitmap;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -