荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: oopilix ([0;1;32;40m), 信区: Visual
标  题: [zl]关于图像放大
发信站: 荔园晨风BBS站 (Mon Oct 13 23:28:31 2003), 站内信件


图像放大一般用插值的,方法很多的了,如果单纯是放大显示的话在VC里倒简单的

//图像缩放,zoomratio_x,zoomratio_y为x,y的缩放比例
void CDib::Zoom(float zoomratio_x,float zoomratio_y)
{
float num_x,num_y;
long Wold,Hold,Wnew,Hnew;
int x0,y0,x1,y1;

if((zoomratio_x==1.0)&&(zoomratio_y==1.0))
return;

num_x=(float)(1.0/zoomratio_x);
num_y=(float)(1.0/zoomratio_y);
Wold=m_dwWidth;
Hold=m_dwHeight;

Wnew = (long)(Wold*zoomratio_x+0.5);
Hnew = (long)(Hold*zoomratio_y+0.5);
long DstLineBytes=(Wnew*m_iBitCount+31)/32*4; //每个扫描行的字节数

if(m_pTempBits!=NULL)
{
delete m_pTempBits;
m_pTempBits=NULL;
}
m_pTempBits=new unsigned char[DstLineBytes*Hnew];
if(m_pTempBits==NULL)
return;
memset(m_pTempBits,0,DstLineBytes*Hnew);

for(y1=0;y1<Hnew;y1++)
for(x1=0;x1<Wnew;x1++)
{
x0= (long)(x1*num_x);
y0= (long)(y1*num_y);
if( (x0>=0) && (x0<Wold) && (y0>=0) && (y0<Hold))
{
int i;
int bits=m_pBIH->biBitCount/8;
for(i=0;i<bits;i++)
m_pTempBits[(Hnew-y1-1)*DstLineBytes+x1*bits+i]=
m_pDibBits[(m_dwHeight-1-y0)*m_dwLine+x0*bits+i];
}
}

delete m_pDibBits;
m_pDibBits=m_pTempBits;
m_pTempBits=NULL;
m_pBIH->biWidth=Wnew;
m_pBIH->biHeight=Hnew;
m_pBIH->biSizeImage=DstLineBytes*Hnew;}
--


 ※ IP来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM oo.pi.li.x]
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.39]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店