C++中大尺寸图象的显示技巧
在C++Builder中使用Timage控件可以方便地读取和显示图像,但是Timage控件本身不能接收输入焦点,也没有滚动条。当显示超出显示区域的大图像时,需要加强图像控制。本文提出了两种最简单有效的方法来满足不同应用的需要。
-方法1:添加滚动条。
-添加滚动条可以通过在TScrollBox控件中放置Timage来实现。步骤如下:
(1)、在表单中放置一个TScrollBox控件并调整其大小。
-(2),将TScrollBox控件的AutoScroll属性设置为True。
(3)在TScrollBox控件中放置一个Timage控件。
-(4)设置Timage控件的属性:AutoSize为真,Left为0,Top为0。以上增强后,如果Timage的图像大于显示窗口,滚动条会自动出现;如果图像小于显示窗口,滚动条会自动消失,从而实现大图像的浏览。
-方法二:图像漫游。
-图像漫游(Image roaming)是指在没有滚动条的情况下,通过键盘或鼠标控制图像的移动,使你可以在一个很小的显示区域内浏览图像的任何部分。以鼠标控制为例。
(1)在窗体中放置一个Tpanel控件,并调整其大小。
-(2),在Tpanel控件中放置一个图像控件。
-(3)将Timage控件的AutoSize属性设置为true,True,Left属性设置为0,Top属性设置为0。
(4)在TForm1的类定义中添加两个私有变量:intiX0,iY0
-(5),响应Timage控件的OnMouseDown和OnMouseMove事件。
void _ _ fastcalltform 1::image1 mousedown(to object * Sender,
TMouseButtonButton,TShiftStateShift,intX,intY)
{
iX0 = X;
iY0 = Y;
}
void _ _ fastcalltform 1::image1 mousemove
(Tobject * Sender,TShiftStateShift,intX,intY)
{
intiDeltaX,iDeltaY
如果(Shift。包含(ssLeft))
{
idel tax = X-iX0;
idel tay = Y-iY0;
if(iDeltaY)
image1-> Left+= idel tax;
if(iDeltaY)
image1-> Top+= idel tay;
}
}
(6)运行时按住鼠标左键拖动,图像会跟着移动。
(7).如果是键盘控制的话,就参考鼠标控制的代码,加上键盘控制。
(8)在实际应用中,根据需要添加边界限制,保证图像不会移出显示区域。
-以上两种方法在自己开发的软件中已经应用多次,效果非常好。
位律师回复
0条评论