C++ 中大尺寸图象的显示技巧

2016-02-19 12:42 3 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐C++ 中大尺寸图象的显示技巧,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】


  在C++Builder中利用Timage控件可以轻松地读入并显示图象,但Timage控件本身不可以接收输入焦点,也没带有滚动条,在显示超出显示区域范围的大图象时,需要对Timage控件进行加强。本文提出两种最轻易实现且有效的方法,满足不同应用的需求。
  
  ----方法一:增加滚动条。
  
  ----增加滚动条可以通过将Timage放在TScrollBox控件中来实现。步骤如下:
  
  ----(1)、在窗体中放置一个TScrollBox控件,调整好其尺寸。
  
  ----(2)、设置TScrollBox控件的AutoScroll属性为True。
  
  ----(3)、在TScrollBox控件是放置一个Timage控件。
  
  ----(4)、设置Timage控件的属性:AutoSize为True,Left为0,Top为0。经以上增强之后,假如Timage的图象比显示窗口大,滚动条会自动出现,假如图象小于显示窗口,滚动条自动消失,实现了大图象的浏览。
  
  ----方法二:图象漫游。
  
  ----图象漫游是指不用滚动条,通过键盘或者鼠标控制图象的移动,从而在较小的显示区域内可以浏览图象的任何部分。下面以鼠标控制为例说明。
  
  ----(1)、在窗体中放置一个Tpanel控件,调整好其尺寸。
  
  ----(2)、在Tpanel控件是放置一个Timage控件。
  
  ----(3)、设置Timage控件的AutoSize属性为True,Left属性为0,Top属性为0。
  
  ----(4)、在TForm1的类定义中加两个私有变量:intiX0,iY0;
  
  ----(5)、响应Timage控件的OnMouseDown和OnMouseMove事件。
  
  void__fastcallTForm1::Image1MouseDown(Tobject*Sender,
  
  TMouseButtonButton,TShiftStateShift,intX,intY)
  
  {
  
  iX0=X;
  
  iY0=Y;
  
  }
  
  
  
  void__fastcallTForm1::Image1MouseMove
  
  (Tobject*Sender,TShiftStateShift,intX,intY)
  
  {
  
  intiDeltaX,iDeltaY;
  
  if(Shift.Contains(ssLeft))
  
  {
  
  iDeltaX=X-iX0;
  
  iDeltaY=Y-iY0;
  
  if(iDeltaY)
  
  Image1->Left+=iDeltaX;
  
  if(iDeltaY)
  
  Image1->Top+=iDeltaY;
  
  }
  
  }
   
  
  ----(6)、运行时按住鼠标左键拖动,图象将跟随移动。
  
  ----(7)、假如通过键盘控制,只需参考鼠标控制的代码,加入键盘控制即可。
  
  ----(8)、实际应用时,根据需要加入边界限制,保证图象不会被移出显示区域之外。
  
  ----以上两种方法在本人开发的软件当中多次应用,效果很好。

来源:https://www.tulaoshi.com/n/20160219/1601613.html

延伸阅读
1. 如何获取应用程序的实例句柄? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle();  2. 如何通过代码获得应用程序主窗口的指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。 AfxG...
传统的WINDOWS应用软件界面给人的感觉总是千篇一律的方方正正的窗体,看的时间长了难免会有些厌烦,总是希望能见到些不同一般的软件界面。如今,相当数量的商业软件在提供优秀而强大的功能的同时,软件的界面也是做得越来越漂亮,比如《超级解霸2000》中的界面插件,使用过的人一定对其华丽的外观布满好感。作为一个编程爱好者,假如自己写...
C++
/*p129*/#include class CComplex{public: CCpomplex(double r=0,double i=0) { realPart=r; imagePart=i; } void print() { cout /*p129*/#include class CComplex{public: CCpomplex(double r=0,double i=0) { realPart=r; imagePart=i; } void print() { cout
标签: PS PS教程
图1 效果图和原图 1.打开将处理的档案,并将其设定为RGB模式。 2.使用(Filter)-(Blur)-(Gaussian Blur),将Radius设为3。 3.使用(Filter)-(Stylize)-(Find Edge)。 4.使用(Filter)-(Other)-(Minimum),将Radius设为2。 图2 调整滤镜 5.使用Ctrl+I来将影像便成负片。 6.使用(Filter)-(Sharpen)-(Unsharpen Mask),...
假如你正在写从文件或网络读写数据的跨平台C/C++代码,那么你必须明白有些问题是因语言,编译器,平台而不同的。 主要的问题是数据对齐,填充,类型大小,字节顺序和默认状态char是否有符号。 对齐 特定机器上,特定的数据被对齐于特定的边界。假如数据没有正确对齐,结果可能是效率降低甚至崩溃。 当你从I/O源读取数...

经验教程

627

收藏

30
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部