📄 image.c
字号:
switch(sampleX) {
case 10://采样率为1/10,每10个点采样一个点
case 20://采样率为20/100,每5个点采样一个点
case 30://采样率为30/100,每3个点采样一个点
case 40://采样率为40/100,每2个点采样一个点
case 50://采样率为50/100,每2个点采样一个点
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx;pMe->i=pMe->i+100/sampleX){//100/sampleX
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ,new_x++,new_y,pMe->pColor,AEE_RO_COPY);
}
}
new_y++;
new_x=0;
break;
case 60://固定取点;10个点,取6个,分别是0,2,3,5,6,8,
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx;pMe->i++){
switch(pMe->i%10) {
case 0:
case 2:
case 3:
case 5:
case 6:
case 8:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ,new_x++,new_y,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of for loop
new_y++;
new_x=0;
break;
case 70://固定取点;10个点,取7个,分别是0,1,3,4,6,7,9
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx;pMe->i++){
switch(pMe->i%10) {
case 0:
case 1:
case 3:
case 4:
case 6:
case 7:
case 9:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ,new_x++,new_y,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of loop
new_y++;
new_x=0;
break;
case 80://固定取点;10个点,取8个,分别是0,1,3,4,5, 6,8,9
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx;pMe->i++){
switch(pMe->i%10) {
case 0:
case 1:
case 3:
case 4:
case 5:
case 6:
case 8:
case 9:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ,new_x++,new_y,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of loop
new_y++;
new_x=0;
break;
case 90://固定取点;10个点,取9个,分别是0,1,2, 3,5, 6,7, 8,9
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx;pMe->i++){
switch(pMe->i%10) {
case 0:
case 1:
case 2:
case 3:
case 5:
case 6:
case 7:
case 8:
case 9:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ,new_x++,new_y,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of loop
new_y++;
new_x=0;
break;
default:
if (sampleX>=100) {//放大,包含所有的倍数放大
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx;pMe->i++){
//得到象素点
IBITMAP_GetPixel(pMe->m_pBitmap, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中,注意考虑放大倍数
for(new_x=pMe->i*sampleX/100;new_x<=(pMe->i+1)*sampleX/100-1;new_x++)
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ,new_x,new_y,pMe->pColor,AEE_RO_COPY);
}//end of for loop
new_y++;
}
break;
}// end of the big switch
// CHECK_ERROR(IBITMAP_BltIn(pbmScreen, 300, 65, ((uint16)bi.cx*sampleX/100), ((uint16)pMe->bi.cy), pMe->m_pBitmap_OBJ, 0, 0, AEE_RO_COPY));
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//对Y轴按照要求变换
new_x=0;
new_y=0;
//创建新的兼容位图
CHECK_ERROR(IBITMAP_CreateCompatibleBitmap(pMe->pbmScreen, &pMe->m_pBitmap_OBJ_OBJ, (uint16)((uint16)pMe->bi.cx*sampleX/100), (uint16)((uint16)pMe->bi.cy*sampleY/100)));
for(pMe->i=0;pMe->i<=(uint16)pMe->bi.cx*sampleX/100;pMe->i++)//X轴不变
switch(sampleY) {
case 10://采样率为1/10,每10个点采样一个点
case 20://采样率为20/100,每5个点采样一个点
case 30://采样率为30/100,每3个点采样一个点
case 40://采样率为40/100,每2个点采样一个点
case 50://采样率为50/100,每2个点采样一个点
for(pMe->j=0;pMe->j<=(uint16)pMe->bi.cy;pMe->j=pMe->j+100/sampleY){//100/sampleX
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap_OBJ, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ_OBJ,new_x,new_y++,pMe->pColor,AEE_RO_COPY);
}
}
new_x++;
new_y=0;
break;
case 60://固定取点;10个点,取6个,分别是0,2,3,5,6,8,
for(pMe->j=0;pMe->j<=(uint16)pMe->bi.cy;pMe->j++){
switch(pMe->j%10) {
case 0:
case 2:
case 3:
case 5:
case 6:
case 8:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap_OBJ, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ_OBJ,new_x,new_y++,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of for loop
new_x++;
new_y=0;
break;
case 70://固定取点;10个点,取7个,分别是0,1,3,4,6,7,9
for(pMe->j=0;pMe->j<=(uint16)pMe->bi.cy;pMe->j++){
switch(pMe->j%10) {
case 0:
case 1:
case 3:
case 4:
case 6:
case 7:
case 9:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap_OBJ, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ_OBJ,new_x,new_y++,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of loop
new_x++;
new_y=0;
break;
case 80://固定取点;10个点,取8个,分别是0,1,3,4,5, 6,8,9
for(pMe->j=0;pMe->j<=(uint16)pMe->bi.cy;pMe->j++){
switch(pMe->j%10) {
case 0:
case 1:
case 3:
case 4:
case 5:
case 6:
case 8:
case 9:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap_OBJ, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ_OBJ,new_x,new_y++,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of for loop
new_x++;
new_y=0;
break;
case 90://固定取点;10个点,取9个,分别是0,1,2, 3,5, 6,7, 8,9
for(pMe->j=0;pMe->j<=(uint16)pMe->bi.cy;pMe->j++){
switch(pMe->j%10) {
case 0:
case 1:
case 2:
case 3:
case 5:
case 6:
case 7:
case 8:
case 9:
//得到象素点
{ IBITMAP_GetPixel(pMe->m_pBitmap_OBJ, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ_OBJ,new_x,new_y++,pMe->pColor,AEE_RO_COPY);
}
break;
default:
break;
};//end of switch
}// end of for loop
new_x++;
new_y=0;
break;
default:
if (sampleY>=100) {//放大,包含所有的倍数放大
for(pMe->j=0;pMe->j<=(uint16)pMe->bi.cy;pMe->j++){
//得到象素点
IBITMAP_GetPixel(pMe->m_pBitmap_OBJ, pMe->i,pMe->j, &pMe->pColor );
//写到新的位图中,注意考虑放大倍数
for(new_y=pMe->j*sampleY/100;new_y<=(pMe->j+1)*sampleY/100-1;new_y++)
IBITMAP_DrawPixel(pMe->m_pBitmap_OBJ_OBJ,new_x,new_y,pMe->pColor,AEE_RO_COPY);
}//end of for loop
new_x++;
}
break;
}// end of the big switch
//CHECK_ERROR(IBITMAP_BltIn(pbmScreen, 0, 65, ((uint16)pMe->bi.cx*sampleX/100), ((uint16)pMe->bi.cy*sampleY/100), pMe->m_pBitmap_OBJ_OBJ, 0, 0, AEE_RO_COPY));
//用 pMe->m_pBitmap 来显示目标位图
IDISPLAY_BitBlt(pMe->a.m_pIDisplay,0,0,((uint16)pMe->bi.cx*sampleX/100), ((uint16)pMe->bi.cy*sampleY/100),pMe->m_pBitmap_OBJ_OBJ,0,0,AEE_RO_COPY);
//////////////////////////////////////////////////////////////////////////
//显示时间
time2 = ISHELL_GetTimeMS(pMe->a.m_pIShell);
pMe->timer2 = time2 - time1;
WSPRINTF(pMe->timer_char2,32,fmt,pMe->timer2);//pMe->timer2);
return SUCCESS;
Error:
return nErr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -