📄 icetek-dm642-pci.c
字号:
#include "math.h"
#include "stdio.h"
#include "ICETEK-DM642-PCI.h"
//工作变量
unsigned char m_dbFrameY[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameU[SIMGWIDTH1*SIMGHEIGHT1];
unsigned char m_dbFrameV[SIMGWIDTH1*SIMGHEIGHT1];
unsigned char m_dbTargetImageR[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbTargetImageG[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbTargetImageB[SIMGWIDTH*SIMGHEIGHT];
unsigned int m_uVideoStatus,m_bFreeze,m_bSave;
unsigned char headerImage[54];
void ICETEKDM642PCIBoardInit()
{
m_uVideoStatus=m_bFreeze=m_bSave=0;
}
void ICETEKDM642PCIYUVRGB()
{
int i,j;
int r,g,b,y,u,v;
unsigned char *py,*pu,*pv,*pr,*pg,*pb;
py=m_dbFrameY; pu=m_dbFrameU; pv=m_dbFrameV;
pr=m_dbTargetImageR; pg=m_dbTargetImageG; pb=m_dbTargetImageB;
for ( i=0;i<SIMGHEIGHT;i++ )
{
for ( j=0;j<SIMGWIDTH;j+=2 ) //列720点,360个32bit,
{
u=(*pu); v=(*pv); y=(*py);
u-=128; v-=128;
r=y+1.402*u;
g=y-0.34414*u-0.71414*v;
b=y+1.772*v;
if ( r>255 ) r=255;
else if ( r<0 ) r=0;
if ( g>255 ) g=255;
else if ( g<0 ) g=0;
if ( b>255 ) b=255;
else if ( b<0 ) b=0;
(*pr)=r; pr++;
(*pg)=g; pg++;
(*pb)=b; pb++;
py++; y=(*py);
r=y+1.402*u;
g=y-0.34414*u-0.71414*v;
b=y+1.772*v;
if ( r>255 ) r=255;
else if ( r<0 ) r=0;
if ( g>255 ) g=255;
else if ( g<0 ) g=0;
if ( b>255 ) b=255;
else if ( b<0 ) b=0;
(*pr)=r; pr++;
(*pg)=g; pg++;
(*pb)=b; pb++;
py++; pu++; pv++;
}
}
SaveToBMP();
}
void SaveToBMP()
{
FILE *fp;
unsigned char *pRGB,*pr,*pg,*pb,*pR,*pG,*pB;
int j,i;
unsigned int *pk;
pRGB=(unsigned char *)headerImage;
for ( i=0;i<54;i++,pRGB++ ) (*pRGB)=0;
pRGB=(unsigned char *)headerImage;
(*pRGB)=0x42; pRGB++; // BM
(*pRGB)=0x4d; pRGB++;
pRGB+=2;
pk=(unsigned int *)pRGB; (*pk)=14+40+180*144*3; // size
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=0; // reserved
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=54; // image offset
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=40; // struct size
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=720; // width
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=576; // height
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=0x180001; // Planes & BitCount
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=0; // Compression
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=720*576*3; // image size
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=3780; // x pixels/m
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=3780; // y pixels/m
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=0; // color used
pRGB+=4;
pk=(unsigned int *)pRGB; (*pk)=0; // important color
if ( fp=fopen("Video.bmp","wb+") )
{
printf("Create a file named Video.bmp\n");
pRGB=headerImage;
fwrite(pRGB,2,1,fp);
fwrite(pRGB+4,52,1,fp);
pR=m_dbTargetImageR+720*575;
pG=m_dbTargetImageG+720*575;
pB=m_dbTargetImageB+720*575;
printf("Saving image data...\n");
for ( j=0;j<576;j++ )
{
pr=pR; pg=pG; pb=pB;
for ( i=0;i<720;i++,pr++,pg++,pb++ )
{
fwrite(pb,1,1,fp);
fwrite(pg,1,1,fp);
fwrite(pr,1,1,fp);
}
pR-=720;
pG-=720;
pB-=720;
if ( j%57==0 )
printf(" completed %d%%\n",j/57*10);
}
fclose(fp);
printf("Finished.\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -