我想改变1024*768的很清晰的jpg图形的尺寸,可是出来以后清晰度很差,不知道我的代码有什么问题,请帮看看,谢谢!    try
    bmp:=tbitmap.Create;
    t:=tbitmap.create;
    jpg:=tjpegimage.Create;    jpg.LoadFromFile(imagefile);    
    t.Assign(jpg);
    bmp.Width:=160
    bmp.Height:=120
    bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,t.Canvas,t.Canvas.ClipRect);    jpg.Assign(bmp);    jpg.CompressionQuality:=100;
    jpg.Compress;//以上两句有没有效果都一样。
    
    sys_san.FileSetAttrEx(targetfile,32);
    jpg.SaveToFile(targetfile);    finally
    bmp.Free;
    jpg.Free;
    t.free;
    end;

解决方案 »

  1.   

    类 别:API
    Windows提供给我们两个API函数,可以动态调整显示器的分辨率,他们是EnumDisplaySettings() 和ChangeDisplaySettings(),下面这个例子就是了
    function DynamicResolution(X, Y: word): BOOL;
    var
      lpDevMode:
     TDeviceMode;
    begin
      Result := EnumDisplaySettings(nil, 0, lpDevMode);
      if Result then
      begin
        lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
        lpDevMode.dmPelsWidth := X;
        lpDevMode.dmPelsHeight := Y;
        Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
      end;
    end;
    procedure TForm1.Button1Click(Sender: Tobject);
    //在delphi5+windows2000上通过。
    begin
      if DynamicResolution(640, 480) then
        ShowMessage('Now is 640*480');
    end;
    procedure TForm1.Button2Click(Sender: Tobject);
    begin
      if DynamicResolution(800, 600) then
        ShowMessage('Now is 800*600');
    end;
      

  2.   

    会不会
    bmp.Width:=160
    bmp.Height:=120
    bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,t.Canvas,t.Canvas.ClipRect);
    因为图像大小变化而像素会自动丢失
    为什么不直接用scale呢?
      

  3.   

    你使用TImage的缩放功能看看,应该比你这样缩小好一些