📄 myproject.cpp
字号:
if ( (HANDLE)lParam != INVALID_HANDLE_VALUE )
{
//graphics file
ReadFile( (HANDLE)lParam, szBuffer, dwBufferMax, &dwNumberOfBytesRead, NULL );
}
else
{
return 0;
}
return dwNumberOfBytesRead;
// return amount read
}
//------------------------- fImageProgress-------------------------------
static void CALLBACK ImageProgress( IImageRender *pRender, BOOL bComplete, LPARAM lParam )
{
if( bComplete )
{
;//Do whatever when done processing the image
}
}
// 以上为JPEG解压函数
/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
// 以下为图像漫游函数
//
//-------------- fMakePicName-----------------------------------------------------
void MakePicName(int intXnumth,int intYnumth,int LeftRight,int UpDown)//leftright 在目标图的左为负,0为目标图同列,右为正;updown上为正,0为目标图同行,下为负
{
lstrcpy(StrPicName0,PrePicName);//为图像文件名赋前缀名
switch(LeftRight)
{
case -2: lstrcat(StrPicName0, intToTCHAR(intXnumth-2,2));break;//xName
case -1: lstrcat(StrPicName0, intToTCHAR(intXnumth-1,2));break;//xName
case 0: lstrcat(StrPicName0, intToTCHAR(intXnumth,2));break;//xName
case 1: lstrcat(StrPicName0, intToTCHAR(intXnumth+1,2));break;//xName
case 2: lstrcat(StrPicName0, intToTCHAR(intXnumth+2,2));break;//xName
}
switch(UpDown)
{
case -2:lstrcat(StrPicName0 , intToTCHAR(intYnumth-2,3));break;//yName
case -1:lstrcat(StrPicName0 , intToTCHAR(intYnumth-1,3));break;//yName
case 0:lstrcat(StrPicName0 , intToTCHAR(intYnumth,3));break;//yName
case 1:lstrcat(StrPicName0 , intToTCHAR(intYnumth+1,3));break;//yName
case 2:lstrcat(StrPicName0 , intToTCHAR(intYnumth+2,3));break;//yName
}
if(PicType==1){lstrcat(StrPicName0 , TEXT(".bmp"));}
else {lstrcat(StrPicName0 , TEXT(".jpg"));}
}
//---------------fRePicAndBoxPosition----------------------------------------------------------------------------
void RePicAndBoxPosition(POINT Center)//重新确定picbox和目标图的位置
{
//
int intXnumth = Center.x/picWidth;//取整
int intYnumth = Center.y/picHeight;
//以下8个为相对于大图左下角(0,0)的象素位置
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
}
//------------fReNotLoadBoxPosition-------------------------------------
void ReNotLoadBoxPosition(POINT Center,RECT pic)
{
//
//注:运行此函数前,必须先计算目标图 Pic的位置
switch(WhereIsCenterAtPic(Center,pic))
{
case 1:
NotLoadBox.top=pic.top+picHeight;
NotLoadBox.bottom=pic.bottom;
NotLoadBox.left=pic.left-picWidth;
NotLoadBox.right=pic.right;
break;
case 2:
NotLoadBox.top=pic.top+picHeight;
NotLoadBox.bottom=pic.bottom;
NotLoadBox.left=pic.left;
NotLoadBox.right=pic.right+picWidth;
break;
case 3:
NotLoadBox.top=pic.top;
NotLoadBox.bottom=pic.bottom-picHeight;
NotLoadBox.left=pic.left;
NotLoadBox.right=pic.right+picWidth;
break;
case 4:
NotLoadBox.top=pic.top;
NotLoadBox.bottom=pic.bottom-picHeight;
NotLoadBox.left=pic.left-picWidth;
NotLoadBox.right=pic.right;
break;
}
}
//---------fWhereIsCenterAtPic------------
int WhereIsCenterAtPic(POINT Center,RECT pic) //计算目标在目标图的位置 以及4幅图像交叉点的位置
{
//
int intXnumth = Center.x/picWidth;//取整
int intYnumth = Center.y/picHeight;
intXnumth++;intYnumth++;//左下角的文件名是01001
int i;
/*第一种情况 目标在目标图的左上部分*/
if( Center.x>= pic.left && Center.x <= pic.left+picWidth/2 && Center.y>=pic.bottom+picHeight/2 && Center.y<=pic.top)
{ i=1; Cross.x=pic.left; Cross.y=pic.top; tag_intXnumth=intXnumth-1;tag_intYnumth=intYnumth;}
/*第二种情况 目标在目标图的右上部分*/
else if(Center.x > pic.left+picWidth/2 && Center.x<= pic.right && Center.y>=pic.bottom+picHeight/2 && Center.y<=pic.top)
{ i=2; Cross.x=pic.right; Cross.y=pic.top; tag_intXnumth=intXnumth;tag_intYnumth=intYnumth;}
/*第三种情况 目标在目标图的右下部*/
else if(Center.x >= pic.left+picWidth/2 && Center.x<= pic.right && Center.y>=pic.bottom && Center.y<pic.bottom+picHeight/2)
{ i=3; Cross.x=pic.right; Cross.y=pic.bottom;tag_intXnumth=intXnumth;tag_intYnumth=intYnumth-1;}
/*第四种情况 目标在目标图的左下部*/
else if(Center.x >= pic.left && Center.x<pic.left+picWidth/2 && Center.y>=pic.bottom && Center.y<pic.bottom+picHeight/2)
{ i=4; Cross.x=pic.left; Cross.y=pic.bottom; tag_intXnumth=intXnumth-1;tag_intYnumth=intYnumth-1;}
return i;
}
//----------------fRePosAndJudgeLoadPic----------------------------------------------------------------
void RePosAndJudgeLoadPic(POINT Center)//重新定位
{
//if(Center.x>=)
/*
//now
int i;
//(1)目标图没改变
if (new_intXnumth==intXnumth && new_intYnumth==intYnumth)
{
//1.目标图没变,所以目标图位置不要修改
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
}
//(2)上图变为目标图
if (new_intXnumth==intXnumth && new_intYnumth==intYnumth+1)
{
//1.目标图变化,目标图移到上图。(即上图变为目标图)
intYnumth=new_intYnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配设备环境
for(i=6;i<=8;i++)
{
SAFE_DeleteDC(g_hdc[i]);//释放设备环境 6 7 8 (!真正释放内存)
g_hdc[i]=g_hdc[i-3];//3 4 5的设备环境给 6 7 8 (!只是指针修改)
g_hdc[i-3]=g_hdc[i-6];//0 1 2的设备环境给3 4 5
g_hdc[i-6]=NULL;//0 1 2的环境变量赋空
//load( i-6 ) 多线程,在入0 1 2
}
}
//(3)下图变为目标图
if (new_intXnumth==intXnumth && new_intYnumth==intYnumth-1)
{
//1.目标图变化,目标图移到下图。(即下图变为目标图)
intYnumth=new_intYnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配其相应的设备环境
for(i=0;i<=2;i++)
{
SAFE_DeleteDC(g_hdc[i]);//释放设备环境
g_hdc[i]=g_hdc[i+3];
g_hdc[i+3]=g_hdc[i+6];
g_hdc[i+6]=NULL;
//load( i+6 )
}
}
//(4)左图变为目标图
if (new_intXnumth==intXnumth-1 && new_intYnumth==intYnumth)
{
//1.目标图变化
intXnumth=new_intXnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配其相应的设备环境
for(i=2;i<=8;i=i+3)
{
SAFE_DeleteDC(g_hdc[i]);//释放设备环境
g_hdc[i]=g_hdc[i-1];
g_hdc[i-1]=g_hdc[i-2];
g_hdc[i-2]=NULL;
//load( i-2 )
}
}
//(5)右图变为目标图
if (new_intXnumth==intXnumth+1 && new_intYnumth==intYnumth)
{
//1.目标图变化,
intXnumth=new_intXnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配其相应的设备环境
for(i=0;i<=6;i=i+3)
{
SAFE_DeleteDC(g_hdc[i]);//释放设备环境
g_hdc[i]=g_hdc[i+1];
g_hdc[i+1]=g_hdc[i+2];
g_hdc[i+2]=NULL;
//load( i+2 )
}
}
//(6)左上图变为目标图
if (new_intXnumth==intXnumth-1 && new_intYnumth==intYnumth+1)
{
//1.目标图变化,
intXnumth=new_intXnumth;
intYnumth=new_intYnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配其相应的设备环境
SAFE_DeleteDC(g_hdc[2]);//释放设备环境
SAFE_DeleteDC(g_hdc[8]);//释放设备环境
SAFE_DeleteDC(g_hdc[5]);//释放设备环境
SAFE_DeleteDC(g_hdc[7]);//释放设备环境
SAFE_DeleteDC(g_hdc[6]);//释放设备环境
g_hdc[8]=g_hdc[4];
g_hdc[4]=g_hdc[0];
g_hdc[5]=g_hdc[1];
g_hdc[7]=g_hdc[3];
g_hdc[0]=NULL;
g_hdc[1]=NULL;
g_hdc[2]=NULL;
g_hdc[3]=NULL;
g_hdc[6]=NULL;
}
//(7)右上图变为目标图
if (new_intXnumth==intXnumth+1 && new_intYnumth==intYnumth+1)
{
//1.目标图变化,
intXnumth=new_intXnumth;
intYnumth=new_intYnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配其相应的设备环境
SAFE_DeleteDC(g_hdc[0]);//释放设备环境
SAFE_DeleteDC(g_hdc[3]);//释放设备环境
SAFE_DeleteDC(g_hdc[8]);//释放设备环境
SAFE_DeleteDC(g_hdc[7]);//释放设备环境
SAFE_DeleteDC(g_hdc[6]);//释放设备环境
g_hdc[6]=g_hdc[4];
g_hdc[4]=g_hdc[2];
g_hdc[3]=g_hdc[1];
g_hdc[7]=g_hdc[5];
g_hdc[0]=NULL;
g_hdc[1]=NULL;
g_hdc[2]=NULL;
g_hdc[5]=NULL;
g_hdc[8]=NULL;
}
//(8)右下图变为目标图
if (new_intXnumth==intXnumth+1 && new_intYnumth==intYnumth-1)
{
//1.目标图变化,
intXnumth=new_intXnumth;
intYnumth=new_intYnumth;
pic.left = intXnumth * picWidth;
pic.bottom = intYnumth * picHeight;
pic.right = pic.left + picWidth;
pic.top = pic.bottom + picHeight;
//2.修改box的位置
box.top = Center.y + PicBoxHeight/2;
box.bottom = Center.y - PicBoxHeight/2;
box.left = Center.x - PicBoxWidth/2;
box.right = Center.x + PicBoxWidth/2;
//3.重新分配其相应的设备环境
SAFE_DeleteDC(g_hdc[0]);//释放设备环境
SAFE_DeleteDC(g_hdc[3]);//释放设备环境
SAFE_DeleteDC(g_hdc[1]);//释放设备环境
SAFE_DeleteDC(g_hdc[2]);//释放设备环境
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -