王涛 《基于ARM嵌入式图像处理系统设计与实现》 第19页 共28页
U16 namme[200]; U16 ch0={'1'};
char str2[]={'1','2','7','_','3','2',' ',' ','B','M','P',0}; U16 str1[]={'1','2','7','_','3','2',' ',' ','B','M','P',0}; U16 str3[17];
strChar2Unicode(namme,n2); //POSMSG pMsg;//消息定义
LCD_ChangeMode(DspGraMode);//转换LCD显示模式为文本显示模式 //LCD_Cls();//文本模式下清屏命令 //ClearScreen();
pdc=CreateDC(); ClearScreen(); for(;;)
{ int i,j,k,nbyte;
U32 cx,cy,wold,hold,wnew,hnew,x0,y0,x1,y1,oldx,oldy; U32 color;
U32 colorbuf[320][240];
FILE* pfile; U8 *pbmp,*bmpstart; static U8 bmp[4096];
float zoomRatio=2,num1;
INT8U err;
BITMAPFILEHEADER bmpfileheader; BITMAPINFOHEADER bmpinfoheader;
if((pfile=OpenOSFile(bmpname, FILEMODE_READ))==NULL)
return;
ReadOSFile(pfile, (U8*)bmp, 2);
// if((bmp[0]&0xffff)!='MB' ) //不是bmp文件
if(bmp[0]!='B' ||bmp[1] !='M')
王涛 《基于ARM嵌入式图像处理系统设计与实现》 第20页 共28页
return;
num1=(float)(1.0/zoomRatio); ReadOSFile(pfile, sizeof(BITMAPFILEHEADER));
wold=bmpinfoheader.biWidth;
hold=bmpinfoheader.biHeight;
nbyte=bmpinfoheader.biBitCount/8;//第x行,第y列
ReadOSFile(pfile, (U8*)&bmpinfoheader, sizeof(BITMAPINFOHEADER));
(U8*)&bmpfileheader,
x0=0; y0=hold-1;
//缩放的关键问题是:在对一副图片进行缩放时,可能用到上一次读入的行象素值,然而,readosfile()函数
//每读一次就向前推进,故必须标记读入时机《使用oldx oldy》 oldx=x0; oldy=y0; num1=1; bmpstart=bmp; pbmp=bmp; for(i=hold-1;i>=0;i--) {pbmp=bmp;
if(!ReadOSFile(pfile, bmp,wold*nbyte+((wold*nbyte)%2)))
break;
for(j=0;j    for(k=0;k color|=*pbmp; }    王涛   《基于ARM嵌入式图像处理系统设计与实现》            第21页      共28页   pbmp++;  colorbuf[i][j]=color;}}          num1=(float)(1.0/zoomRatio);   wnew = (U32)(wold*zoomRatio+0.5);          hnew = (U32)(hold*zoomRatio+0.5);    for(y1=0;y1   for(x1=0;x1 {x0= (U32)(x1*num1);       y0= (U32)(y1*num1);  SetPixel(pdc,y1,x1,colorbuf[x0][y0]);} /////////////////////////////////////////   CloseOSFile(pfile);          OSTimeDly(200);//主任务挂起200毫秒}}  5.5 转置图像主要代码  void Main_Task(void *Id)             //Main_Test_Task  {char bmpname[12]={'1','2','7','_','3','2',' ',' ','B','M','P',0}; int i=0,status=0,j=0; PDC pdc;  char n2[]=\U16 namme[200]; U16 ch0={'1'};  char str2[]={'1','2','7','_','3','2',' ',' ','B','M','P',0}; U16 str1[]={'1','2','7','_','3','2',' ',' ','B','M','P',0}; U16 str3[17];  strChar2Unicode(namme,n2);   LCD_ChangeMode(DspGraMode);//转换LCD显示模式为文本显示模式  pdc=CreateDC(); ClearScreen();    王涛   《基于ARM嵌入式图像处理系统设计与实现》            第22页      共28页  for(;;)                                   {int i,j,k,nbyte; U32 cx,cy; U32 color; FILE* pfile; U8 *pbmp;  static U8 bmp[4096];  INT8U err;  BITMAPFILEHEADER bmpfileheader; BITMAPINFOHEADER bmpinfoheader;  if((pfile=OpenOSFile(bmpname, FILEMODE_READ))==NULL)  return;  ReadOSFile(pfile, (U8*)bmp, 2); if(bmp[0]!='B' ||bmp[1] !='M')   return;  ReadOSFile(pfile, (U8*)&bmpfileheader, sizeof(BITMAPFILEHEADER)); ReadOSFile(pfile, (U8*)&bmpinfoheader, sizeof(BITMAPINFOHEADER)); cx=bmpinfoheader.biWidth; cy=bmpinfoheader.biHeight; nbyte=bmpinfoheader.biBitCount/8; //OSSemPend(Lcd_Disp_Sem, 0, &err); for(i=cy-1;i>=0;i--){             pbmp=bmp;  if(!ReadOSFile(pfile, bmp,cx*nbyte+((cx*nbyte)%2)))  break;  for(j=0;j  for(k=0;k   color|=*pbmp; }  pbmp++;   SetPixel(pdc,i, j, color);}}  CloseOSFile(pfile);          OSTimeDly(200);//主任务挂起200毫秒}}