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

📄 frameimage.c

📁 brew一些源码
💻 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 + -