📄 subject_34389.htm
字号:
<p>
序号:34389 发表者:language 发表日期:2003-03-29 14:13:43
<br>主题:求教图形放大的算法
<br>内容:把图形放大又不至于模糊,请问大家有何好的算法,老的或是新的都可以。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:michael 回复日期:2003-03-29 14:58:46
<br>内容:这个不仅能放大还能缩小用指针写的速度很快。是一种很简单的插值算法。<BR><BR><BR><BR>=========================================================================<BR>BOOL COXDIB::ChangeDIB(int cx, int cy)<BR>{<BR><BR> int width=GetWidth();<BR> int height=GetHeight();<BR><BR> if((cx==width)&&(cy==height))<BR> return FALSE;<BR><BR> TRACE("width=%d,height=%d\n",width,height);<BR><BR> COXDIB bmp;<BR> bmp.CreateEmptyDIB(24,cx,cy);<BR> for(int k=0;k<cx;k++)<BR> for(int n=0;n<cy;n++)<BR> bmp.SetPixel(k,n,RGB(255,255,255));<BR><BR> int tempcy,tempcx,startcx,startcy;<BR> double sx,sy,smin; //x和y方向的比例系数<BR> sx=double(cx)/(double)width;<BR> sy=double(cy)/(double)height;<BR><BR> smin=(sx>sy)?sy:sx;<BR> tempcy=(int)(smin*height);<BR> tempcx=(int)(smin*width);<BR><BR> startcx=(cx-tempcx)/2;<BR> startcy=(cy-tempcy)/2;<BR>// endcx=(cx+tempcx)/2;<BR>// endcy=(cy+tempcy)/2;<BR><BR> int i,j;<BR><BR> for(i=0;i<tempcx;i++)<BR> {<BR> for(j=0;j<tempcy;j++)<BR> {<BR> double x,y;<BR> x=(double)i/smin;<BR> y=(double)j/smin;<BR><BR> if(x<=0)x=0;<BR> if(x>=width-1)x=width-1;<BR> if(y<=0)y=0;<BR> if(y>=height-1)y=height-1;<BR> if( ((int)x==0)||((int)x==width-1)||((int)y==0)||((int)y==height-1) )<BR> {<BR> COLORREF color1=GetPixel((int)x,(int)y);<BR> bmp.SetPixel(i+startcx,j+startcy,color1);<BR> }<BR> else<BR> {<BR> double r1,r2,r3,r4;<BR> double g1,g2,g3,g4;<BR> double b1,b2,b3,b4;<BR> COLORREF c1,c2,c3,c4;<BR> c1=GetPixel((int)x,(int)y);<BR> c2=GetPixel((int)x+1,(int)y);<BR> c3=GetPixel((int)x,(int)y+1);<BR> c4=GetPixel((int)x+1,(int)y+1);<BR> double dis1=x-(int)x;<BR> double dis2=1-x+(int)x;<BR> double dis3=y-(int)y;<BR> double dis4=1-y+(int)y;<BR> r1=GetRValue(c1);<BR> g1=GetGValue(c1);<BR> b1=GetBValue(c1);<BR> r2=GetRValue(c2);<BR> g2=GetGValue(c2);<BR> b2=GetBValue(c2);<BR> r3=GetRValue(c3);<BR> g3=GetGValue(c3);<BR> b3=GetBValue(c3);<BR> r4=GetRValue(c4);<BR> g4=GetGValue(c4);<BR> b4=GetBValue(c4);<BR><BR> int r=int(dis4*(r1*dis2+r2*dis1)+dis3*(r3*dis2+r4*dis1));<BR> if(r>255)r=255;<BR> int g=int(dis4*(g1*dis2+g2*dis1)+dis3*(g3*dis2+g4*dis1));<BR> if(g>255)g=255;<BR> int b=int(dis4*(b1*dis2+b2*dis1)+dis3*(b3*dis2+b4*dis1));<BR> if(b>255)b=255;<BR> <BR> bmp.SetPixel(i+startcx,j+startcy,RGB((BYTE)r,(BYTE)g,(BYTE)b));<BR><BR>// COLORREF color=GetPixel(int(x+0.5),int(y+0.5));<BR>// bmp1.SetPixel(i,j,color); <BR> }<BR> }<BR> }<BR><BR> Empty();<BR> CreateEmptyDIB(24,cx,cy);<BR>// m_pDIB=bmp.GetDIBPtr();<BR>// m_pDIB=bmp.CopyData(GetDIBPtr());<BR> for(int m=0;m<cx;m++)<BR> {<BR> for(int l=0;l<cy;l++)<BR> {<BR>// SetPixel(100,l,RGB(255,255,255));<BR> COLORREF color=bmp.GetPixel(m,l);<BR> SetPixel(m,l,color);<BR> }<BR>// TRACE("PROBLEM %d\n",m);<BR> }<BR> return TRUE;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:language 回复日期:2003-03-30 16:46:10
<br>内容:thank you very much!!!!!!!!!!!!!!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -