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

📄 operate.c

📁 brew c代码实现图片翻转
💻 C
字号:

#include "mycommon.h"

IBitmap* zoomin(mainproject1 *pMe,const IBitmap *pBitmap,uint32 zoomlr,uint32 zoomud)
{
	uint32 n;
	uint32 i,j,k;
	int src,des;

	uint32 w,h;
	uint32 nw,nh;
	IDIB *pDib;
	IDIB *psDib;
	IBitmap *comBitmap;	
	int err;

	if(zoomlr == 1 && zoomud == 1)
		return (IBitmap *)pBitmap;

	IBITMAP_GetInfo((IBitmap *)pBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	w = pMe->myBitInfo.cx;
	h = pMe->myBitInfo.cy;

	if(SUCCESS != IBITMAP_CreateCompatibleBitmap(pMe->myBitmap,&comBitmap,(uint16)(w*zoomlr),(uint16)(h*zoomud)))
		return (IBitmap *)pBitmap;
	err = IBITMAP_QueryInterface(comBitmap,AEECLSID_DIB,(void**)&pDib);
	err = IBITMAP_QueryInterface((IBitmap *)pBitmap,AEECLSID_DIB,(void**)&psDib);
	if(err != SUCCESS)
	{
		FREEDIB(psDib);
		FREEDIB(pDib);
		FREEMAP(comBitmap);
		return (IBitmap *)pBitmap;	
	}

	n = pDib->nDepth/8;
	for(i=0; i<h; ++i)
	{
		for(j=0; j<w; ++j)
		{
			for(k=0; k<n; ++k)
			{
				src = psDib->nPitch*i+j*n+k;
				for(nh=0; nh<zoomud; ++nh)
				{
					for(nw=0; nw<zoomlr; ++nw)
					{
						des = pDib->nPitch*zoomud*i+pDib->nPitch*nh+j*n*zoomlr+nw*n+k;
						pDib->pBmp[des] = psDib->pBmp[src];
					}
				}
			}
		}
	}	
	IBITMAP_GetInfo(comBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	FREEDIB(psDib);
	FREEDIB(pDib);
	return comBitmap;
}
IBitmap*  zoomout(mainproject1 *pMe,const IBitmap *pBitmap,uint32 zoomlr,uint32 zoomud)
{
	uint32 n;
	uint32 i,j,k;
	int src,des;
	int err;

	uint32 w,h;
	IDIB *pDib;
	IDIB *psDib;
	IBitmap *comBitmap;		

	IBITMAP_GetInfo((IBitmap *)pBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	w = pMe->myBitInfo.cx;
	h = pMe->myBitInfo.cy;	

	if(zoomlr == 1 && zoomud == 1)
		return (IBitmap *)pBitmap;

	if(SUCCESS != IBITMAP_CreateCompatibleBitmap((IBitmap *)pBitmap,&comBitmap,(uint16)(w/zoomlr),(uint16)(h/zoomud)))
		return (IBitmap *)pBitmap;
	err = IBITMAP_QueryInterface(comBitmap,AEECLSID_DIB,(void**)&pDib);
	err = IBITMAP_QueryInterface((IBitmap *)pBitmap,AEECLSID_DIB,(void**)&psDib);
	if(err != SUCCESS)
	{
		FREEDIB(psDib);
		FREEDIB(pDib);
		FREEMAP(comBitmap);
		return (IBitmap *)pBitmap;	
	}
	n = pDib->nDepth/8;

	for(i=0; i< h/zoomud; ++i)
	{
		for(j=0; j<w/zoomlr; ++j)
		{
			for(k=0; k<n; ++k)
			{
				des = pDib->nPitch*i+j*n+k;
				src = psDib->nPitch*zoomud*i+j*n*zoomlr+k;
				pDib->pBmp[des] = psDib->pBmp[src];					
			}
		}
	}	
	IBITMAP_GetInfo(comBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	FREEDIB(psDib);
	FREEDIB(pDib);
	return comBitmap;
}
IBitmap* loadBitmap(mainproject1 *pMe, const char * strBitname)
{
	IBitmap *pBitmap;

	pBitmap = ISHELL_LoadBitmap(pMe->a.m_pIShell,strBitname);
	if(NULL == pBitmap)
		return NULL;
	IBITMAP_GetInfo(pBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));		
	return pBitmap;	
}
/*/
IBitmap* loadBitmap(mainproject1 *pMe, const char * strBitname)
{
	IBitmap *pBitmap;
	IBitmap *comBitmap;
	IBitmap *pScreen;
	AEEBitmapInfo info;
	pBitmap = ISHELL_LoadBitmap(pMe->a.m_pIShell,strBitname);
	if(NULL == pBitmap)
		return NULL;
	IBITMAP_GetInfo(pBitmap,&info,sizeof(info));

	pScreen = IDISPLAY_GetDestination(pMe->a .m_pIDisplay);
	IBITMAP_CreateCompatibleBitmap(pScreen,&comBitmap,info.cx,info.cy);
	IBitmap_BltIn(comBitmap,0,0,info.cx,info.cy,pBitmap,0,0,AEE_RO_COPY);
	FREEMAP(pBitmap);
	FREEMAP(pScreen);
	IBITMAP_GetInfo(comBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));		
	return comBitmap;	
}/*/
void showBitmap(mainproject1 *pMe, const IBitmap *pBitmap)
{
	
	relocate(pMe);	
	IBITMAP_GetInfo((IBitmap *)pBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));	
	IDISPLAY_BitBlt(pMe->a.m_pIDisplay,pMe->start_x,pMe->start_y,pMe->myBitInfo.cx,pMe->myBitInfo.cy,pBitmap,pMe->off_x,pMe->off_y,AEE_RO_COPY);
}

IBitmap* zoom(mainproject1* pMe,const IBitmap *pBitmap,ZoomMode zm,int flag)
{
	int zoomlr;
	int zoomud;
	IBitmap *comBitmap;
	IBitmap *tmpBitmap;
	tmpBitmap = NULL;
	comBitmap = NULL;

	if(pMe->comBitmap != pMe->myBitmap)
		FREEMAP(pMe->comBitmap);

	switch(zm)
	{
	case ZOOM_H:
		pMe->zoomLRtimes += flag;
		break;
	case ZOOM_V:
		pMe->zoomUDtimes += flag;
		break;
	case ZOOM_HV:
		pMe->zoomLRtimes += flag;
		pMe->zoomUDtimes += flag;
		break;
	}
	if(pMe->zoomLRtimes > 3)
		pMe->zoomLRtimes = 3;
	if(pMe->zoomUDtimes > 3)
		pMe->zoomUDtimes = 3;

	zoomlr = pMe->zoomLRtimes ;
	zoomud = pMe->zoomUDtimes ;

	if(zoomlr > 0)
	{
		if(zoomud >=0 )
			comBitmap = zoomin(pMe,pBitmap,zoomlr+1,zoomud+1);
		else if(zoomud < 0 )
		{
			tmpBitmap = zoomin(pMe,pBitmap,zoomlr+1,1);
			comBitmap = zoomout(pMe,tmpBitmap,1,-zoomud+1);
		}	
	}
	else if(zoomlr < 0)
	{
		if(zoomud <= 0 )
			comBitmap = zoomout(pMe,pBitmap,-zoomlr+1,-zoomud+1);
		else if(zoomud > 0)
		{
			tmpBitmap = zoomin(pMe,pBitmap,1,zoomud+1);
			comBitmap = zoomout(pMe,tmpBitmap,-zoomlr+1,1);
		}
	}
	else
	{
		if(zoomud > 0)
			comBitmap = zoomin(pMe,pBitmap,1,zoomud+1);
		else if(zoomud < 0)
			comBitmap = zoomout(pMe,pBitmap,1,-zoomud+1);
	}	
	FREEMAP(tmpBitmap);
	if(comBitmap == NULL)
	{
		IBITMAP_GetInfo((IBitmap*)pBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
		return (IBitmap *)pBitmap;
	}
	return comBitmap;
}
void relocate(mainproject1* pMe)
{

	IBITMAP_GetInfo(pMe->comBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	if(pMe->myBitInfo.cx > pMe->blankArea.dx)
	{
		pMe->start_x = 0;
		if(pMe->off_x < 0)
			pMe->off_x = 0;
		if(pMe->off_x > pMe->myBitInfo.cx -pMe->blankArea.dx)
			pMe->off_x = pMe->myBitInfo.cx -pMe->blankArea.dx;
	}
	else
	{
		pMe->off_x = 0;
		if(pMe->start_x < 0)
			pMe->start_x = 0;
		if(pMe->start_x > pMe->blankArea.dx - pMe->myBitInfo.cx)
			pMe->start_x = pMe->blankArea.dx - pMe->myBitInfo.cx;
	}

	if(pMe->myBitInfo.cy > pMe->blankArea.dy)
	{
		pMe->start_y = 0;
		if(pMe->off_y < 0)
			pMe->off_y = 0;
		if(pMe->off_y > pMe->myBitInfo.cy -pMe->blankArea.dy)
			pMe->off_y = pMe->myBitInfo.cy -pMe->blankArea.dy;
	}
	else
	{
		pMe->off_y = 0;
		if(pMe->start_y < 0)
			pMe->start_y = 0;
		if(pMe->start_y > pMe->blankArea.dy - pMe->myBitInfo.cy)
			pMe->start_y = pMe->blankArea.dy - pMe->myBitInfo.cy;
	}
}

int HConventPic(mainproject1* pMe,IBitmap *pBitmap)
{
	IDIB * pDib;
	int i,j,k;
	int n ;
	int src,des,byTemp;
	int w,h;
	int err;
	AEEBitmapInfo info;
	IBITMAP_GetInfo(pBitmap, &info, sizeof(info));
	w = info.cx;
	h = info.cy;	
	err = IBITMAP_QueryInterface(pBitmap,AEECLSID_DIB,(void**)&pDib);
	if(err != SUCCESS)
		return EFAILED;

	n = pDib->nDepth/8;	
	

	for (i=0; i<h; i++)
	{
		for (j=0; j<w / 2; j++)
		{
			for(k=0;k < n; ++k)
			{
				src = pDib->nPitch*i + j*n+k;
				des = src + (w-1-j*2)*n;
				byTemp = pDib->pBmp[src];
				pDib->pBmp[src] = pDib->pBmp[des];
				pDib->pBmp[des] = byTemp;
			}
		}
	}
	IDIB_Release(pDib);
	return SUCCESS;
}
//
int VConventPic(mainproject1* pMe,IBitmap *pBitmap)
{
	IDIB * pDib;
	int i,j,k;
	int n ;
	int src,des,byTemp;
	int w,h;
	int err;
	AEEBitmapInfo info;
	IBITMAP_GetInfo(pBitmap, &info, sizeof(info));
	w = info.cx;
	h = info.cy;	
	err = IBITMAP_QueryInterface(pBitmap,AEECLSID_DIB,(void**)&pDib);
	if(err != SUCCESS)
		return EFAILED;

	n = pDib->nDepth/8;	
	for (i=0; i<h/2; i++)
	{
		for (j=0; j<w*n; j++)
		{			
			src = pDib->nPitch*i + j;
			des = (h-1-i)*pDib->nPitch + j;
			byTemp = pDib->pBmp[src];
			pDib->pBmp[src] = pDib->pBmp[des];
			pDib->pBmp[des] = byTemp;
		}
	}
	IDIB_Release(pDib);
	return SUCCESS;
}
//
IBitmap*  clockTurn(mainproject1 *pMe,const IBitmap *pBitmap)
{
	uint32 n;
	uint32 i,j,k;
	int src,des;
	int err;

	uint32 w,h;
	IDIB *pDib;
	IDIB *psDib;
	IBitmap *comBitmap;		

	IBITMAP_GetInfo((IBitmap *)pBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	w = pMe->myBitInfo.cx;
	h = pMe->myBitInfo.cy;	

	if(SUCCESS != IBITMAP_CreateCompatibleBitmap((IBitmap *)pBitmap,&comBitmap,h,w))
		return (IBitmap *)pBitmap;
	err = IBITMAP_QueryInterface(comBitmap,AEECLSID_DIB,(void**)&pDib);
	err = IBITMAP_QueryInterface((IBitmap *)pBitmap,AEECLSID_DIB,(void**)&psDib);
	if(err != SUCCESS)
	{
		FREEDIB(psDib);
		FREEDIB(pDib);
		FREEMAP(comBitmap);
		return (IBitmap *)pBitmap;	
	}
	n = pDib->nDepth/8;

	for (i=0; i<h; i++)
	{
		for (j=0; j<w; j++)
		{
			for(k=0;k < n; ++k)
			{
				src = psDib->nPitch*i + j*n+k;
				des = pDib->nPitch*j + (h-i-1)*n+k;
				pDib->pBmp[des] = psDib->pBmp[src];
			}
		}
	}
	IBITMAP_GetInfo(comBitmap,&pMe->myBitInfo,sizeof(AEEBitmapInfo));
	FREEDIB(psDib);
	FREEDIB(pDib);

	if(pMe->comBitmap != pMe->myBitmap)
		FREEMAP(pMe->comBitmap);
	if(pBitmap != pMe->myBitmap)
		FREEMAP((IBitmap *)pBitmap);
	
	return comBitmap;
}

⌨️ 快捷键说明

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