各位大哥:
我用image显示一副jpg格式的图象
我能不能把它按我要求放大10倍 或者是20呢~

解决方案 »

  1.   

    1 image1.Stretch:=true;
    image1.Width:=image1.Width*10
    2 用api函数StrechBlt
      

  2.   

    呵呵,一段代码到处贴
    procedure TForm1.Button1Click(Sender: TObject);
    var
     Bmp :TBitmap;
    begin
     Bmp :=TBitmap.Create;
     Bmp.Width :=Image1.Width*2;
     Bmp.Height :=Image1.Height*2;
     SetStretchBltMode(Bmp.Canvas.Handle,HalfTone);
     StretchBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,
                Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,SRCCOPY);
     Image1.Picture.Bitmap.Assign(Bmp);
     Bmp.Free;
    end;
      

  3.   

    一算法原理
    在Delphi中,可利用类Tcanvas的CopyRect方法实现图像的放大和缩小。其功能是将源画布上的一个指定矩形区域(简称源矩形)内的像素,拷贝到目的画布上的一个指定矩形区域(简称目的矩形)中,亦可称之为像素块复制,如图1所示。图1 像素块复制
    由CopyMode属性确定拷贝的模式。在直接拷贝模式(cmSrcCopy)下,当源矩形与目的矩形相等时,图像不变;若源矩形大于目的矩形,图像则缩小;而当源矩形小于目的矩形时,图像便被放大(在目的矩形中扩展)。源矩形与目的矩形大小之比,决定图像的缩放倍数。CopyRect方法声明如下:
    Procedure CopyRect(const Dest: TRect; Canvas:
    TCanvas; const Source: Trect);
    其中参数,Dest为目的矩形,Canvas是源画布,Source为源矩形。
    二 实现步骤
    1. 新建应用程序主目录C:\Magnifier及其子目录Images,将事先制作好的位图图像Picture.bmp存入Images目录。本例中,Picture.bmp的大小为260×310像素。
    2. 启动Delphi IDE,新建项目Magnifier.dpr,主窗体单元命名为Main.pas,存入C:\Magnifier目录。在主窗体上放置一个TPanel组件,并在其中加入两个TImage组件。两个mage组件分别命名为ForeImage和BackImage,前者重叠于后者之上,并且都装入Picture.bmp位图。
    主窗体和各组件的主要属性按表1设置:
    表1
    上述各组件的许多属性,读者亦可根据个人的爱好设定。
    3. 在主单元Main.pas的implementation段声明常量和变量:
    const
    sSide=30;
    dSide=45;
    var
    msHide: Boolean;
    OldX, OldY, NewX, NewY: Integer;
    DestRect, SourceRect : TRect;
    其中,常量sSide和dSide用以控制"放大镜"的大小和放大倍数;变量msHide控制光标(鼠标)的隐藏和打开;其他变量用以确定放大部位。
    4. 建立主窗体MainForm的OnCreate事件,加入下列语句,以初始化变量及设置复制模式:
    msHide:=True;
    Canvas.CopyMode:=cmSrcCopy;
    5. 创建主窗体MainForm的OnKeyPress事件处理程序,在其begin与end之间输入语句"Close;",当按任意键时结束程序运行。
    6. 定义过程ImageCopy,用于处理图像的放大和恢复,当移动鼠标时调用。这是实现图像局部放大最重要的过程,源代码如下。
    procedure TMainForm.ImageCopy(BoxCenterX,
    BoxCenterY, BoxSide: Integer);
    begin
    with SourceRect do
    begin
    Left:=BoxCenterX-BoxSide;
    Top:=BoxCenterY-BoxSide;
    Right:=BoxCenterX+BoxSide;
    Bottom:=BoxCenterY+BoxSide;
    end;
    with DestRect do
    begin
    Left:=BoxCenterX-dSide;
    Top:=BoxCenterY-dSide;
    Right:=BoxCenterX+dSide;
    Bottom:=BoxCenterY+dSide;
    end;
    ForeImage.Canvas.CopyRect(DestRect,
    BackImage.Canvas, SourceRect);
    end;
    注意,别忘了在Main.pas的"type"中声明过程ImageCopy。
    7. 创建ForeImage的OnMouseMove事件处理程序,当鼠标在图像上移动时,获取其位置,并作为过程调用的实参。此时,光标隐藏,"放大镜"出现。随着"放大镜"的移动,图像新的部位被放大,滑过的部位又恢复原状。以下为begin与end之间的代码:
    NewX:=X;
    NewY:=Y;
    if msHide then
    begin
    OldX:=NewX;
    OldY:=NewY;
    msHide:=False;
    ShowCursor(False);
    end else
    begin
    ImageCopy(OldX, OldY, dSide);
    end;
    ImageCopy(NewX, NewY, sSide);
    OldX:=NewX;
    OldY:=NewY;
    8. 建立主窗体MainForm的OnMouseMove事件处理程序,当鼠标移开图像时,"放大镜"隐藏,光标重新出现。源代码片段如下:
    if not msHide then
    begin
    msHide:=True;
    ShowCursor(True);
    ImageCopy(OldX, OldY, dSide);
    end;
      

  4.   

    还是用Image.strech吧,否则放大的图象可能很难看的.