⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_59022.htm

📁 vc
💻 HTM
字号:
<p>
序号:59022 发表者:Henry Tony 发表日期:2003-11-05 15:08:36
<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-11-05 15:30:09
<br>内容:&nbsp;&nbsp; 用差值缩放算法。<BR><BR>BOOL COXDIB::ChangeSizeDIB(int cx, int cy)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int width=GetWidth();<BR>&nbsp;&nbsp;&nbsp;&nbsp;int height=GetHeight();<BR>&nbsp;&nbsp;&nbsp;&nbsp;int depth=GetColorDepth();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if((cx==width)&amp;&amp;(cy==height))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;TRACE(&#34;width=%d,height=%d\n&#34;,width,height);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;COXDIB bmp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int tempcy,tempcx,startcx,startcy,endcx,endcy;<BR>&nbsp;&nbsp;&nbsp;&nbsp;double sx,sy,smin;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//x和y方向的比例系数<BR>&nbsp;&nbsp;&nbsp;&nbsp;sx=double(cx)/(double)width;<BR>&nbsp;&nbsp;&nbsp;&nbsp;sy=double(cy)/(double)height;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;smin=(sx&gt;sy)?sy:sx;<BR>&nbsp;&nbsp;&nbsp;&nbsp;tempcy=(int)(smin*height);&nbsp;&nbsp;&nbsp;&nbsp; //放大后尺寸<BR>&nbsp;&nbsp;&nbsp;&nbsp;tempcx=(int)(smin*width);<BR> <BR>&nbsp;&nbsp;&nbsp;&nbsp;startcx=(cx-tempcx)/2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//起始座标&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;startcy=(cy-tempcy)/2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;endcx=(cx+tempcx)/2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //终止 坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;endcy=(cy+tempcy)/2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;bmp.CreateEmptyDIB(24,tempcx,tempcy);<BR>&nbsp;&nbsp;&nbsp;&nbsp;BYTE *ptr = (BYTE *)FindDIBBits();&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;BYTE *bmpptr = (BYTE *) bmp.FindDIBBits();&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;long BytesPerLine&nbsp;&nbsp;= width*depth;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(BytesPerLine%4!=0)BytesPerLine=(BytesPerLine/4+1)*4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;long bmpBytesPerLine&nbsp;&nbsp;= tempcx*depth;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(bmpBytesPerLine%4!=0)bmpBytesPerLine=(bmpBytesPerLine/4+1)*4;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;StretchCopyInnerImageSelf(ptr, bmpptr, BytesPerLine ,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmpBytesPerLine, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSize(width,height), <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint(0,height),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint(0,width), <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint(0,tempcy), <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPoint(0,tempcx));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CreateEmptyDIB(24,cx,cy);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ptr = (BYTE *)FindDIBBits();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;memset(ptr,255,cx*3*cy);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;BytesPerLine&nbsp;&nbsp;= cx*3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(BytesPerLine%4!=0)BytesPerLine=(BytesPerLine/4+1)*4;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int i,j;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;tempcy;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt;tempcx;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int k=0;k&lt;depth;k++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(ptr+(startcy+i)*BytesPerLine+(j+startcx)*3+k) = *(bmpptr+i*bmpBytesPerLine+j*3+k);<BR>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(ptr+(startcy+j)*BytesPerLine+startcx*3+1) = *(bmpptr+j*bmpBytesPerLine+i*3+1);<BR>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(ptr+(startcy+j)*BytesPerLine+startcx*3+2) = *(bmpptr+j*bmpBytesPerLine+i*3+2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR>这段代码可以改变COXDIB对象的大小,用指针实现的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Henry Tony 回复日期:2003-11-06 17:48:36
<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>
回复者:michael 回复日期:2003-11-06 20:18:02
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;用DirectShow播放
<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 + -