📄 image.c
字号:
#include "image.h"
#define Point(x,y) lpPoints[(x)+(y)*nWidth]
#define Point1(x,y) lpPoints1[(x)+(y)*nWidth]
#define qvga(y,x) p_qvga[(y)*320+(x)]
#define qvga_r(y,x) qvga_r[(y)*320+(x)]
#define qvga_g(y,x) qvga_g[(y)*320+(x)]
#define qvga_b(y,x) qvga_b[(y)*320+(x)]
#define uxga(y,x) p_uxga[(y)*1600+(x)]
#define svga_y(y,x) svga_y[(y)*800+(x)]
#define svga_Cb(y,x) svga_Cb[(y)*400+(x)]
#define svga_Cr(y,x) svga_Cr[(y)*400+(x)]
//#define nWidth=640
//#define nHeight=480
void Sobel()
{
int nWidth=640;
int nHeight=480;
int x,y,x1,y1,i;
volatile Uint8 *lpPoints=(volatile Uint8 *)(0x80000000);
volatile Uint8 *lpPoints1=(volatile Uint8 *)(0x80100000);
int d,max;
static int s[8][9]={
{-1,-2,-1,0,0,0,1,2,1},
{0,-1,-2,1,0,-1,2,1,0},
{1,0,-1,2,0,-2,1,0,-1},
{2,1,0,1,0,-1,0,-1,-2},
{1,2,1,0,0,0,-1,-2,-1},
{0,1,2,-1,0,1,-2,-1,0},
{-1,0,1,-2,0,2,-1,0,1},
{-2,-1,0,-1,0,1,0,1,2}
};
for(y=1;y<nHeight-1;y++)
{
for(x=1;x<nWidth-1;x++)
{
max=0;
for(i=0;i<8;i++)
{
d=0;
for(y1=0;y1<3;y1++)
for(x1=0;x1<3;x1++)
{
d+=s[i][x1+y1*3]*Point(x+x1-1,y+y1-1);
}
if (d>max) max=d;
}
if (max>255) max=255;
Point1(x,y)=(Uint8)max;
}
}
}
void SVGA2QVGA_BW(volatile Uint8 *svga_y,
volatile Uint8 *qvga_r,volatile Uint8 *qvga_g,volatile Uint8 *qvga_b,Uint8 zoom)
{
Uint16 i,j;
if(zoom==0)
{
for (i=0;i<120;i++)
{
for(j=0;j<160;j++)
{
qvga_r(2*i,2*j)=svga_y(i*5+1,j*5+1);
qvga_r(2*i+1,2*j)=svga_y(i*5+3,j*5+1);
qvga_r(2*i,2*j+1)=svga_y(i*5+1,j*5+3);
qvga_r(2*i+1,2*j+1)=svga_y(i*5+3,j*5+3);
qvga_g(2*i,2*j)=svga_y(i*5+1,j*5+1);
qvga_g(2*i+1,2*j)=svga_y(i*5+3,j*5+1);
qvga_g(2*i,2*j+1)=svga_y(i*5+1,j*5+3);
qvga_g(2*i+1,2*j+1)=svga_y(i*5+3,j*5+3);
qvga_b(2*i,2*j)=svga_y(i*5+1,j*5+1);
qvga_b(2*i+1,2*j)=svga_y(i*5+3,j*5+1);
qvga_b(2*i,2*j+1)=svga_y(i*5+1,j*5+3);
qvga_b(2*i+1,2*j+1)=svga_y(i*5+3,j*5+3);
}
}
}
else if(zoom==1)
{
for (i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
qvga_r(i,j)=svga_y(i+180,j+240);
qvga_g(i,j)=svga_y(i+180,j+240);
qvga_b(i,j)=svga_y(i+180,j+240);
}
}
}
}
/*void SVGA2QVGA(volatile Uint8 *p_svga,volatile Uint8 *p_qvga,Uint8 zoom)
{
Uint16 i,j;
if(zoom==0)
{
for (i=0;i<120;i++)
{
for(j=0;j<160;j++)
{
qvga(2*i,2*j)=svga(i*5+1,j*5+1);
qvga(2*i+1,2*j)=svga(i*5+3,j*5+1);
qvga(2*i,2*j+1)=svga(i*5+1,j*5+3);
qvga(2*i+1,2*j+1)=svga(i*5+3,j*5+3);
}
}
}
else if(zoom==1)
{
for (i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
qvga(i,j)=svga(i+180,j+240);
}
}
}
}*/
void SVGA2QVGA_RGB(volatile Uint8 *svga_y,volatile Uint8 *svga_Cb,volatile Uint8 *svga_Cr,
volatile Uint8 *qvga_r, volatile Uint8 *qvga_g,volatile Uint8 *qvga_b,
Uint8 zoom)
{
Uint16 i,j;
// int data;
if(zoom==0)
{
for (i=0;i<120;i++)
{
for (j=0;j<80;j++)
{
/* data = svga_y(5*i+1,10*j+1)+((351*(svga_Cr(5*i+1,5*j)-128))>>8);
if(data>0xff) qvga_r(2*i,4*j)=0xff;
else if(data<0) qvga_r(2*i,4*j)=0;
else qvga_r(2*i,4*j)=data;
data= svga_y(5*i+1,10*j+3)+((351*(svga_Cr(5*i+1,5*j+1)-128))>>8);
if(data>0xff) qvga_r(2*i,4*j+1)=0xff;
else if(data<0) qvga_r(2*i,4*j+1)=0;
else qvga_r(2*i,4*j+1)=data;
data = svga_y(5*i+1,10*j+6)+((351*(svga_Cr(5*i+1,5*j+3)-128))>>8);
if(data>0xff) qvga_r(2*i,4*j+2)=0xff;
else if(data<0) qvga_r(2*i,4*j+2)=0;
else qvga_r(2*i,4*j+2)=data;
data = svga_y(5*i+1,10*j+8)+((351*(svga_Cr(5*i+1,5*j+4)-128))>>8);
if(data>0xff) qvga_r(2*i,4*j+3)=0xff;
else if(data<0) qvga_r(2*i,4*j+3)=0;
else qvga_r(2*i,4*j+3)=data;
data = svga_y(5*i+3,10*j+1)+((351*(svga_Cr(5*i+3,5*j)-128))>>8);
if(data>0xff) qvga_r(2*i+1,4*j)=0xff;
else if(data<0) qvga_r(2*i+1,4*j)=0;
else qvga_r(2*i+1,4*j)=data;
data = svga_y(5*i+3,10*j+3)+((351*(svga_Cr(5*i+3,5*j+1)-128))>>8);
if(data>0xff) qvga_r(2*i+1,4*j+1)=0xff;
else if(data<0) qvga_r(2*i+1,4*j+1)=0;
else qvga_r(2*i+1,4*j+1)=data;
data= svga_y(5*i+3,10*j+6)+((351*(svga_Cr(5*i+3,5*j+3)-128))>>8);
if(data>0xff) qvga_r(2*i+1,4*j+2)=0xff;
else if(data<0) qvga_r(2*i+1,4*j+2)=0;
else qvga_r(2*i+1,4*j+2)=data;
data= svga_y(5*i+3,10*j+8)+((351*(svga_Cr(5*i+3,5*j+4)-128))>>8);
if(data>0xff) qvga_r(2*i+1,4*j+3)=0xff;
else if(data<0) qvga_r(2*i+1,4*j+3)=0;
else qvga_r(2*i+1,4*j+3)=data;
data = svga_y(5*i+1,10*j+1)-((179*(svga_Cr(5*i+1,5*j)-128)+86*(svga_Cb(5*i+1,5*j)-128))>>8);
if (data>0xff) qvga_g(2*i,4*j)=0xff;
else if (data<0) qvga_g(2*i,4*j)=0;
else qvga_g(2*i,4*j)=data;
data = svga_y(5*i+1,10*j+3)-((179*(svga_Cr(5*i+1,5*j+1)-128)+86*(svga_Cb(5*i+1,5*j+1)-128))>>8);
if(data>0xff) qvga_g(2*i,4*j+1)=0xff;
else if(data<0) qvga_g(2*i,4*j+1)=0;
else qvga_g(2*i,4*j+1)=data;
data= svga_y(5*i+1,10*j+6)-((179*(svga_Cr(5*i+1,5*j+3)-128)+86*(svga_Cb(5*i+1,5*j+3)-128))>>8);
if(data>0xff) qvga_g(2*i,4*j+2)=0xff;
else if(data<0) qvga_g(2*i,4*j+2)=0;
else qvga_g(2*i,4*j+2)=data;
data= svga_y(5*i+1,10*j+8)-((179*(svga_Cr(5*i+1,5*j+4)-128)+86*(svga_Cb(5*i+1,5*j+4)-128))>>8);
if(data>0xff) qvga_g(2*i,4*j+3)=0xff;
else if(data<0) qvga_g(2*i,4*j+3)=0;
else qvga_g(2*i,4*j+3)=data;
data = svga_y(5*i+3,10*j+1)-((179*(svga_Cr(5*i+3,5*j)-128)+86*(svga_Cb(5*i+3,5*j)-128))>>8);
if(data>0xff) qvga_g(2*i+1,4*j)=0xff;
else if(data<0) qvga_g(2*i+1,4*j)=0;
else qvga_g(2*i+1,4*j)=data;
data = svga_y(5*i+3,10*j+3)-((179*(svga_Cr(5*i+3,5*j+1)-128)+86*(svga_Cb(5*i+3,5*j+1)-128))>>8);
if(data>0xff) qvga_g(2*i+1,4*j+1)=0xff;
else if(data<0) qvga_g(2*i+1,4*j+1)=0;
else qvga_g(2*i+1,4*j+1)=data;
data= svga_y(5*i+3,10*j+6)-((179*(svga_Cr(5*i+3,5*j+3)-128)+86*(svga_Cb(5*i+3,5*j+3)-128))>>8);
if(data>0xff) qvga_g(2*i+1,4*j+2)=0xff;
else if(data<0) qvga_g(2*i+1,4*j+2)=0;
else qvga_g(2*i+1,4*j+2)=data;
data= svga_y(5*i+3,10*j+8)-((179*(svga_Cr(5*i+3,5*j+4)-128)+86*(svga_Cb(5*i+3,5*j+4)-128))>>8);
if (data>0xff) qvga_g(2*i+1,4*j+3)=0xff;
else if(data<0) qvga_g(2*i+1,4*j+3)=0;
else qvga_g(2*i+1,4*j+3)=data;
data = svga_y(5*i+1,10*j+1)+((443*(svga_Cb(5*i+1,5*j)-128))>>8);
if(data>0xff) qvga_b(2*i,4*j)=0xff;
else if(data<0) qvga_b(2*i,4*j)=0;
else qvga_b(2*i,4*j)=data;
data= svga_y(5*i+1,10*j+3)+((443*(svga_Cb(5*i+1,5*j+1)-128))>>8);
if(data>0xff) qvga_b(2*i,4*j+1)=0xff;
else if(data<0) qvga_b(2*i,4*j+1)=0;
else qvga_b(2*i,4*j+1)=data;
data= svga_y(5*i+1,10*j+6)+((443*(svga_Cb(5*i+1,5*j+3)-128))>>8);
if(data>0xff) qvga_b(2*i,4*j+2)=0xff;
else if (data<0) qvga_b(2*i,4*j+2)=0;
else qvga_b(2*i,4*j+2)=data;
data= svga_y(5*i+1,10*j+8)+((443*(svga_Cb(5*i+1,5*j+4)-128))>>8);
if(data>0xff) qvga_b(2*i,4*j+3)=0xff;
else if(data<0) qvga_b(2*i,4*j+3)=0;
else qvga_b(2*i,4*j+3)=data;
data = svga_y(5*i+3,10*j+1)+((443*(svga_Cb(5*i+3,5*j)-128))>>8);
if(data>0xff) qvga_b(2*i+1,4*j)=0xff;
else if(data<0) qvga_b(2*i+1,4*j)=0;
else qvga_b(2*i+1,4*j)=data;
data= svga_y(5*i+3,10*j+3)+((443*(svga_Cb(5*i+3,5*j+1)-128))>>8);
if(data>0xff) qvga_b(2*i+1,4*j+1)=0xff;
else if(data<0) qvga_b(2*i+1,4*j+1)=0;
else qvga_b(2*i+1,4*j+1)=data;
data= svga_y(5*i+3,10*j+6)+((443*(svga_Cb(5*i+3,5*j+3)-128))>>8);
if(data>0xff) qvga_b(2*i+1,4*j+2)=0xff;
else if(data<0) qvga_b(2*i+1,4*j+2)=0;
else qvga_b(2*i+1,4*j+2)=data;
data= svga_y(5*i+3,10*j+8)+((443*(svga_Cb(5*i+3,5*j+4)-128))>>8);
if(data>0xff) qvga_b(2*i+1,4*j+3)=0xff;
else if(data<0) qvga_b(2*i+1,4*j+3)=0;
else qvga_b(2*i+1,4*j+3)=data;*/
qvga_r(2*i,4*j) = ADJPIXEL(svga_y(5*i+1,10*j+1)+((351*(svga_Cr(5*i+1,5*j)-128))>>8));
qvga_r(2*i,4*j+1)= ADJPIXEL(svga_y(5*i+1,10*j+3)+((351*(svga_Cr(5*i+1,5*j+1)-128))>>8));
qvga_r(2*i,4*j+2) = ADJPIXEL(svga_y(5*i+1,10*j+6)+((351*(svga_Cr(5*i+1,5*j+3)-128))>>8));
qvga_r(2*i,4*j+3) = ADJPIXEL(svga_y(5*i+1,10*j+8)+((351*(svga_Cr(5*i+1,5*j+4)-128))>>8));
qvga_r(2*i+1,4*j) = ADJPIXEL(svga_y(5*i+3,10*j+1)+((351*(svga_Cr(5*i+3,5*j)-128))>>8));
qvga_r(2*i+1,4*j+1) = ADJPIXEL(svga_y(5*i+3,10*j+3)+((351*(svga_Cr(5*i+3,5*j+1)-128))>>8));
qvga_r(2*i+1,4*j+2)= ADJPIXEL(svga_y(5*i+3,10*j+6)+((351*(svga_Cr(5*i+3,5*j+3)-128))>>8));
qvga_r(2*i+1,4*j+3)= ADJPIXEL(svga_y(5*i+3,10*j+8)+((351*(svga_Cr(5*i+3,5*j+4)-128))>>8));
qvga_g(2*i,4*j) = ADJPIXEL(svga_y(5*i+1,10*j+1)-((179*(svga_Cr(5*i+1,5*j)-128)+86*(svga_Cb(5*i+1,5*j)-128))>>8));
qvga_g(2*i,4*j+1) = ADJPIXEL(svga_y(5*i+1,10*j+3)-((179*(svga_Cr(5*i+1,5*j+1)-128)+86*(svga_Cb(5*i+1,5*j+1)-128))>>8));
qvga_g(2*i,4*j+2)= ADJPIXEL(svga_y(5*i+1,10*j+6)-((179*(svga_Cr(5*i+1,5*j+3)-128)+86*(svga_Cb(5*i+1,5*j+3)-128))>>8));
qvga_g(2*i,4*j+3)= ADJPIXEL(svga_y(5*i+1,10*j+8)-((179*(svga_Cr(5*i+1,5*j+4)-128)+86*(svga_Cb(5*i+1,5*j+4)-128))>>8));
qvga_g(2*i+1,4*j) = ADJPIXEL(svga_y(5*i+3,10*j+1)-((179*(svga_Cr(5*i+3,5*j)-128)+86*(svga_Cb(5*i+3,5*j)-128))>>8));
qvga_g(2*i+1,4*j+1) =ADJPIXEL(svga_y(5*i+3,10*j+3)-((179*(svga_Cr(5*i+3,5*j+1)-128)+86*(svga_Cb(5*i+3,5*j+1)-128))>>8));
qvga_g(2*i+1,4*j+2)= ADJPIXEL(svga_y(5*i+3,10*j+6)-((179*(svga_Cr(5*i+3,5*j+3)-128)+86*(svga_Cb(5*i+3,5*j+3)-128))>>8));
qvga_g(2*i+1,4*j+3)= ADJPIXEL(svga_y(5*i+3,10*j+8)-((179*(svga_Cr(5*i+3,5*j+4)-128)+86*(svga_Cb(5*i+3,5*j+4)-128))>>8));
qvga_b(2*i,4*j) = ADJPIXEL(svga_y(5*i+1,10*j+1)+((443*(svga_Cb(5*i+1,5*j)-128))>>8));
qvga_b(2*i,4*j+1)= ADJPIXEL(svga_y(5*i+1,10*j+3)+((443*(svga_Cb(5*i+1,5*j+1)-128))>>8));
qvga_b(2*i,4*j+2)= ADJPIXEL(svga_y(5*i+1,10*j+6)+((443*(svga_Cb(5*i+1,5*j+3)-128))>>8));
qvga_b(2*i,4*j+3)= ADJPIXEL(svga_y(5*i+1,10*j+8)+((443*(svga_Cb(5*i+1,5*j+4)-128))>>8));
qvga_b(2*i+1,4*j) = ADJPIXEL(svga_y(5*i+3,10*j+1)+((443*(svga_Cb(5*i+3,5*j)-128))>>8));
qvga_b(2*i+1,4*j+1)= ADJPIXEL(svga_y(5*i+3,10*j+3)+((443*(svga_Cb(5*i+3,5*j+1)-128))>>8));
qvga_b(2*i+1,4*j+2)= ADJPIXEL(svga_y(5*i+3,10*j+6)+((443*(svga_Cb(5*i+3,5*j+3)-128))>>8));
qvga_b(2*i+1,4*j+3)= ADJPIXEL(svga_y(5*i+3,10*j+8)+((443*(svga_Cb(5*i+3,5*j+4)-128))>>8));
}
}
}
else if(zoom==1)
{
for(i=0;i<240;i++)
{
for(j=0;j<160;j++)
{
qvga_r(i,2*j) = ADJPIXEL(svga_y(i+180,2*j+240)+((351*(svga_Cr(i+180,j+120)-128))>>8));
qvga_r(i,2*j+1) = ADJPIXEL(svga_y(i+180,2*j+241)+((351*(svga_Cr(i+180,j+120)-128))>>8));
qvga_g(i,2*j) = ADJPIXEL(svga_y(i+180,2*j+240)-((179*(svga_Cr(i+180,j+120)-128)+86*(svga_Cb(i+180,j+120)-128))>>8));
qvga_g(i,2*j+1) = ADJPIXEL(svga_y(i+180,2*j+241)-((179*(svga_Cr(i+180,j+120)-128)+86*(svga_Cb(i+180,j+120)-128))>>8));
qvga_b(i,2*j) = ADJPIXEL(svga_y(i+180,2*j+240)+((443*(svga_Cb(i+180,j+120)-128))>>8));
qvga_b(i,2*j+1) = ADJPIXEL(svga_y(i+180,2*j+241)+((443*(svga_Cb(i+180,j+120)-128))>>8));
}
}
}
}
Uint8 ADJPIXEL(int pixel)
{
Uint8 data;
if(pixel>0xff) data=0xff;
else if(pixel<0) data=0;
else data=pixel;
return data;
}
void UXGA2QVGA(volatile Uint8 *p_uxga,volatile Uint8 *p_qvga,Uint8 zoom)
{
Uint16 i,j;
if(zoom==0)
{
for (i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
qvga(i,j)=uxga(i*5+2,j*5+2);
}
}
}
else if(zoom==1)
{
for (i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
qvga(i,j)=uxga(i+480,j+640);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -