1。请问PHOTOSHOP的放大用DELPHI怎么实现?
2。PHOTOSHOP中的矩形选择框用DELPHI怎么实现?
请高手们指点。(最好有注释)

解决方案 »

  1.   

    1、直接对Canvas进行操作,放大就用StretchDraw方法
    2、在鼠标事件中记录矩形的范围,虚线就自己画以上都是对canvas进行操作,你研究一下TCanvas就行了
      

  2.   

    图像放大在delphi里可以用一种变通的方法:
    用一个TImage装载一张图片,把Stretch设置为true,在你需要改变图片的大小时直接修改TImage的Top,Left,Width,Height来把图片拉扯变大。
    如果要自己做的话,这就涉及到计算机图形学内容了,需要把图像乘一个放大矩阵,具体内容记不得了,以前学图形学时用过,当时是用VC开发的。
      

  3.   

    第二个问题,在鼠标down时记录X,Y,在UP时再记录X,Y,4个坐标可以确定一个矩形,线画一下不难的。
      

  4.   

    用TCanvas可以完成不太复杂的处理,放大,画虚框。但要做到Photoshp那样很难。那就要用到: jinjiajun(洛林) 兄说的那样的知识。洛林兄的变通的方法是不是会影响速度,如果把图像放大5倍,你的image就五倍大,小图像没问题,处理大图像时是否会有问题!!随便说说,没试过
      

  5.   

    如果是把image的left,top,width,height可以变化的话,调整好大小后用proportional就可以了要是left,top,width,height不能变化的话,我也在等待高手的方案关注.....
      

  6.   

    没做过高深的,我一般是用楼上几位兄弟的方法,图形学学的太差:(
    给你转贴一段猛料上的吧======================================================================
    图象局部放大的原理和方法    
      本文介绍实现图象局部、平滑和无闪烁放大的算法原理,以及在Delphi中实现的技术。读完本文,您一定会为Delphi能用如此少的代码实现如此强大的功能惊叹不已,这是许多其它开发工具所无法比拟的。 
    算法原理在Delphi中,可利用类Tcanvas的CopyRect方法实现图象的放大和缩小。其功能是将源画布上的一个指定矩形区域(简称源矩形)内的象素,拷贝到目的画布上的一个指定矩形区域(简称目的矩形)中。亦可称之为象素块复制,如图1所示。由CopyMode属性确定拷贝的模式。在直接拷贝模式(cmSrcCopy)下,当源矩形与目的矩形相等时,图象不变;若源矩形大于目的矩形,图象则缩小;而当源矩形小于目的矩形时,图象便被放大(在目的矩形中扩展)。源矩形与目的矩形大小之比,决定图象的缩放倍数。CopyRect方法声明如下:Procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: Trect);其中参数,Dest为目的矩形,Canvas是源画布,Source为源矩形。实现步骤新建应用程序主目录C:及其子目录Images,将事先制作好的位图图象Picture.bmp存入Images目录。本例中,Picture.bmp的大小为260*310象素。启动Delphi IDE,新建项目Magnifier.dpr,主窗体单元命名为Main.pas,存入C:目录。在主窗体上放置一个TPanel组件,并在其中加入两个TImage组件。两个TImage组件分别命名为ForeImage和BackImage,前者重叠于后者之上,并且都装入Picture.bmp位图。主窗体和各组件的主要属性按表1设置:表1 主窗体和各组件属性设置组 件 属 性 设 置Form1 BorderIcons.biMaximize FalseBorderStyle bsNoneColor clRedHeight 364KeyPreview TrueName MainFormPosition poScreenCenterWidth 294WindowState wsNormalPanel1 Align alNoneBevelInner bvLoweredBevelOuter bvRaisedBevelWidth 2BorderStyle bsNoneBorderWidth 2Height 322Name FramePanelVisible TureWidth 272Image1 Align alNoneAutoSize TrueCenter TrueHeight 310Name BackImagePicture Picture.bmpStretch FalseVisible FalseWidth 260Image2 Align alNoneAutoSize TrueCenter TrueHeight 310Name ForeImagePicture Picture.bmpStretch FalseVisible TrueWidth 260上述各组件的许多属性,读者亦可根据个人的爱好设定。在主单元Main.pas的implementation段声明常量和变量:constsSide=30;dSide=45;varmsHide: Boolean;OldX, OldY, NewX, NewY: Integer;DestRect, SourceRect : TRect;其中,常量sSide和dSide用以控制“放大镜”的大小和放大倍数;变量msHide控制光标(鼠标)的隐藏和打开;其它变量用以确定放大部位。建立主窗体MainForm的OnCreate事件,加入下列语句,以初始化变量及设置复制模式:msHide:=True;Canvas.CopyMode:=cmSrcCopy; 
     
      

  7.   

    用循环读取距阵中的第[x,y]个点然后将其X坐标*N,Y坐标*N,再用循环将其下面的N*N的距阵画成这个像素的状态.代码就不写了...