?? operate.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 + -