BitBlt(tDC,0,0,w,h,sDC,0,0,SRCCOPY);
SetStretchBltMode(dDC,STRETCH_DELETESCANS);
StretchBlt(dDC,0,0,vw,vh,tDC,0,0,w,h,SRCCOPY);
最后绘制到显示的区域即可:
例如:BitBlt(GetDC(0),vx,vy,vx+vw,xy+vh,dDC,0,0,SRCCOPY);
// ------------------------------------
2.图像漫游
先定义三个全局变量:
FBeginDragPoint :TPoint; // 记录鼠标开始拖动的位置
FBeginDragSBPoint :TPoint; // 记录“中心点”位置
FBeginDrag :boolean; // 是否已经开始“拖动”
a,b :integer; // “中心点”位置
在鼠标左键点击时,记录鼠标的位置和“中心点”的位置,同时设置 FBeginDrag 为真
当鼠标右键弹起时,设置 FBeginDrag 为假
鼠标移动时,判断 FBeginDrag ,如果为假不进行处理,如果为真进行下面处理:
假设 X,Y 为鼠标当前的位置
a=FBeginDragPoint.X-((X-FBeginDragPoint.X)*100) div PZoom
b=FBeginDragPoint.Y-((Y-FBeginDragPoint.Y)*100) div PZoom
最后使用上面介绍的图像放大显示出图像
技巧篇:
1.如果图像较大,使用 delphi 的 位图对象会出现内存溢出错误,这时可以进行如下设置:
bitImage:=TBitmap.Create;
bitImage.PixelFormat:=pf24bit;
bitImage.ReleaseHandle;
2.如果要让图像自动适应窗口的大小,参考以下代码:
var
p1,p2 :double;
begin
p1:=pw/sw;
p2:=ph/sw;
if p1>p2 then PZoom:=Round(p2*100)
else PZoom:=Round(p1*100);
if PZoom=0 then PZoom:=100;
end;
3.要想让图像的效果好,最好在全屏幕方式下进行
该方法为“Crazy Marker”所用,如果读者有兴趣可以看看效果
凌丽软件工作室
2003.12.7