基于ARM嵌入式图像处理系统设计与实现论文 下载本文

王涛 《基于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毫秒}}