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

📄 images.html

📁 对于学习很有帮助
💻 HTML
📖 第 1 页 / 共 2 页
字号:
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Height</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">310</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Name</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">BackImage</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Picture</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Picture.bmp</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Stretch</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">False</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Visible</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">False</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Width</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">260</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Image2</font></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Align</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">alNone</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">AutoSize</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">True</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Center</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">True</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Height</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">310</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Name</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">ForeImage</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Picture</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Picture.bmp</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Stretch</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">False</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="10"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">Visible</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="10"><font SIZE="1"><p ALIGN="JUSTIFY">True</font></td>
    </tr>
    <tr>
      <td WIDTH="21%" VALIGN="MIDDLE" HEIGHT="5"></td>
      <td WIDTH="40%" VALIGN="MIDDLE" HEIGHT="5"><font SIZE="1"><p ALIGN="JUSTIFY">Width</font></td>
      <td WIDTH="38%" VALIGN="MIDDLE" HEIGHT="5"><font SIZE="1"><p ALIGN="JUSTIFY">260</font></td>
    </tr>
  </table>
  <font FACE="宋体" LANG="ZH-CN" SIZE="3"><p ALIGN="JUSTIFY">上述各组件的许多属性,读者亦可根据个人的爱好设定。</p>
  <li>在主单元Main.pas的implementation段声明常量和变量:</li>
  </font><font SIZE="1"><p ALIGN="JUSTIFY">const</p>
  <p ALIGN="JUSTIFY">sSide=30; </p>
  <p ALIGN="JUSTIFY">dSide=45;</p>
  <p ALIGN="JUSTIFY">var</p>
  <p ALIGN="JUSTIFY">msHide: Boolean;</p>
  <p ALIGN="JUSTIFY">OldX, OldY, NewX, NewY: Integer;</p>
  <p ALIGN="JUSTIFY">DestRect, SourceRect : TRect; </p>
  </font><font FACE="宋体" LANG="ZH-CN" SIZE="3"><p ALIGN="JUSTIFY">其中,常量sSide和dSide用以控制“放大镜”的大小和放大倍数;变量msHide控制光标(鼠标)的隐藏和打开;其它变量用以确定放大部位。</p>
  <li>建立主窗体MainForm的OnCreate事件,加入下列语句,以初始化变量及设置复制模式:</li>
  </font><font SIZE="1"><p ALIGN="JUSTIFY">msHide:=True;</p>
  <p ALIGN="JUSTIFY">Canvas.CopyMode:=cmSrcCopy;</p>
  </font><font FACE="宋体" LANG="ZH-CN" SIZE="3">
  <li>创建主窗体MainForm的OnKeyPress事件处理程序,在其begin与end之间输入语句“</font><font
    SIZE="1">Close;</font><font FACE="宋体" LANG="ZH-CN" SIZE="1">”</font><font
    FACE="宋体" LANG="ZH-CN" SIZE="3">,当按任意键时结束程序运行。</li>
  <li>定义过程ImageCopy,用于处理图象的放大和恢复,当移动鼠标时调用。这是实现图象局部放大最重要的过程,源代码如下。</li>
  </font><font SIZE="1"><p ALIGN="JUSTIFY">procedure TMainForm.ImageCopy(BoxCenterX, 
  BoxCenterY, BoxSide: Integer);</p>
  <p ALIGN="JUSTIFY">begin</p>
  <p ALIGN="JUSTIFY">with SourceRect do</p>
  <p ALIGN="JUSTIFY">begin</p>
  <p ALIGN="JUSTIFY">Left:=BoxCenterX-BoxSide;</p>
  <p ALIGN="JUSTIFY">Top:=BoxCenterY-BoxSide;</p>
  <p ALIGN="JUSTIFY">Right:=BoxCenterX+BoxSide;</p>
  <p ALIGN="JUSTIFY">Bottom:=BoxCenterY+BoxSide;</p>
  <p ALIGN="JUSTIFY">end;</p>
  <p ALIGN="JUSTIFY">with DestRect do</p>
  <p ALIGN="JUSTIFY">begin</p>
  <p ALIGN="JUSTIFY">Left:=BoxCenterX-dSide;</p>
  <p ALIGN="JUSTIFY">Top:=BoxCenterY-dSide;</p>
  <p ALIGN="JUSTIFY">Right:=BoxCenterX+dSide;</p>
  <p ALIGN="JUSTIFY">Bottom:=BoxCenterY+dSide;</p>
  <p ALIGN="JUSTIFY">end;</p>
  <p ALIGN="JUSTIFY">ForeImage.Canvas.CopyRect(DestRect, BackImage.Canvas, SourceRect);</p>
  <p ALIGN="JUSTIFY">end;</p>
  </font><font FACE="宋体" LANG="ZH-CN" SIZE="3"><p ALIGN="JUSTIFY">注意,别忘了在Main.pas的“type”中声明过程ImageCopy。</p>
  <li>创建ForeImage的OnMouseMove事件处理程序,当鼠标在图象上移动时,获取其位置,并作为过程调用的实参。此时,光标隐藏,“放大镜”出现。随着“放大镜”的移动,图象新的部位被放大,滑过的部位又恢复原状。以下为begin与end之间的代码:</li>
  </font><font SIZE="1"><p ALIGN="JUSTIFY">NewX:=X;</p>
  <p ALIGN="JUSTIFY">NewY:=Y;</p>
  <p ALIGN="JUSTIFY">if msHide then</p>
  <p ALIGN="JUSTIFY">begin</p>
  <p ALIGN="JUSTIFY">OldX:=NewX;</p>
  <p ALIGN="JUSTIFY">OldY:=NewY;</p>
  <p ALIGN="JUSTIFY">msHide:=False;</p>
  <p ALIGN="JUSTIFY">ShowCursor(False); </p>
  <p ALIGN="JUSTIFY">end else</p>
  <p ALIGN="JUSTIFY">begin</p>
  <p ALIGN="JUSTIFY">ImageCopy(OldX, OldY, dSide);</p>
  <p ALIGN="JUSTIFY">end;</p>
  <p ALIGN="JUSTIFY">ImageCopy(NewX, NewY, sSide);</p>
  <p ALIGN="JUSTIFY">OldX:=NewX;</p>
  <p ALIGN="JUSTIFY">OldY:=NewY;</p>
  </font><font FACE="宋体" LANG="ZH-CN" SIZE="3">
  <li>建立主窗体MainForm的OnMouseMove事件处理程序,当鼠标移开图象时,“放大镜”隐藏,光标重新出现。源代码片段如下:</li>
</ol>
</font><font SIZE="1">

<p ALIGN="JUSTIFY">if not msHide then</p>

<p ALIGN="JUSTIFY">begin</p>

<p ALIGN="JUSTIFY">msHide:=True;</p>

<p ALIGN="JUSTIFY">ShowCursor(True);</p>

<p ALIGN="JUSTIFY">ImageCopy(OldX, OldY, dSide); </p>

<p ALIGN="JUSTIFY">end;</p>
</font><font FACE="宋体" LANG="ZH-CN" SIZE="1">

<ol>
  </font><font FACE="宋体" LANG="ZH-CN"><b>
  <li>编译运行</li>
  </b></font><font FACE="宋体" LANG="ZH-CN" SIZE="3"><p ALIGN="JUSTIFY">至此,已不再需要做更多的事情,立即编译运行吧。啊,美丽的照片出现在屏幕中央!试试放大效果。将鼠标徐徐移入相框,奇迹出现了,鼠标变成了“放大镜”,所到之处,图象的相应部位被放大,十分平滑,毫无闪烁。这不是同您手持放大镜,观看地图和照片的情景一样吗。好酷啊!还有什么能比这更激动人心的呢?!</p>
  </font><font FACE="宋体" LANG="ZH-CN"><b>
  <li>技术剖析</li>
</ol>
</b></font><font FACE="宋体" LANG="ZH-CN" SIZE="3">

<p ALIGN="JUSTIFY">以上介绍了利用了画布的CopyRect方法,将图象以象素块从后台隐藏的TImage组件画布上向前台TImage组件的画布上拷贝,以实现图象的放大与恢复的技术。由于这一技术的采用,在图象放大前不需要存储象素,此后直接从后台TImage组件画布上恢复图象。不仅节省了内存资源,也确保了对图象的局部进行平滑、无闪烁地放大。同时,程序源代码也简洁、明了。</p>

<p ALIGN="JUSTIFY">“放大镜”的中心便是鼠标的位置,这样处理的好处是使得图象在“放大镜”中均匀展开,并确保图象边缘也能同样放大。</p>

<p ALIGN="JUSTIFY">要改变“放大镜”的大小和图象的放大倍数,只需修改常量sSide和dSide的值。实际应用中,亦可灵活处置,如将它们设置成变量,由程序菜单控制。本例“放大镜”的大小为90*90个象素,放大倍数为1.5。值得一提的是,这里的“放大镜”比真正的玻璃放大镜的效果要好得多。玻璃放大镜是用凸透镜制成的,中间与边缘的放大倍数不一致,导致图象发生形变。而且,当一边移动一边观察时,很容易使人眼花缭乱。本文为您展示的“放大镜”则没有这些现象。</p>

<p ALIGN="JUSTIFY">利用TCanvas的StretchDraw方法或其它方法,也可以实现图象的局部放大。另外,虽然本文介绍的算法已经相当令人满意,但还是可以作进一步修改的。例如在“放大镜”移动时,只放大和恢复必要的部分。有兴趣的读者不妨一试。</p>

<p ALIGN="JUSTIFY">程序编译、运行环境为Delphi 3.0和中文Windows 98。</p>

<p ALIGN="JUSTIFY"> </p>
</font><font FACE="宋体" LANG="ZH-CN" SIZE="1"><b>

<p ALIGN="JUSTIFY">参考文献</p>

<ol>
  </b>
  <li>《</font><font SIZE="1">Delphi 3.0 </font><font FACE="宋体" LANG="ZH-CN" SIZE="1">编程参考手册》</font><font
    SIZE="1"> [</font><font FACE="宋体" LANG="ZH-CN" SIZE="1">美</font><font SIZE="1">] P. 
    Thurrott, G. Brent, R. Bagdazian, S. Tendon </font><font FACE="宋体" LANG="ZH-CN"
    SIZE="1">著</font><font SIZE="1"> </font><font FACE="宋体" LANG="ZH-CN" SIZE="1">卢庆龄</font><font
    SIZE="1"> </font><font FACE="宋体" LANG="ZH-CN" SIZE="1">蒋全</font><font SIZE="1"> </font><font
    FACE="宋体" LANG="ZH-CN" SIZE="1">等译</font><font SIZE="1"> </font><font
    FACE="宋体" LANG="ZH-CN" SIZE="1">清华大学出版社</font><font SIZE="1"> 1998</font><font
    FACE="宋体" LANG="ZH-CN" SIZE="1">年</font><font SIZE="1">8</font><font FACE="宋体"
    LANG="ZH-CN" SIZE="1">月第</font><font SIZE="1">1</font><font FACE="宋体" LANG="ZH-CN"
    SIZE="1">版</li>
</ol>
</font>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -