1

我目前正在pascal使用中制作桌面截图lazarus,我的截图工作但它只显示桌面的左上角。我将其设置为在TImage. 我尝试使用MyBitmap.width := Round(370)MyBitmap.Height := Round(240);

但那些没有用。

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, LCLIntf, LCLType;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }



procedure TForm1.Button1Click(Sender: TObject);

  var
    MyBitmap : Tbitmap;
    ScreenDC: HDC;


begin


  try
  MyBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);
  MyBitmap.Width := Round(370);
  Mybitmap.Height := Round(240);
  ReleaseDC(0, ScreenDC);
  Image1.Picture.Bitmap.Assign(MyBitmap);
  finally
    MyBitmap.free;
  end;





end;

end. 
4

1 回答 1

4

将 LoadFromDevice 替换为

MyBitmap.SetSize(370, 240); 
StretchBlt(MyBitmap.Canvas.Handle, //destination HDC
  0, 0, 370, 240, // destination size
  ScreenDC, //source HDC
  0, 0, Screen.Width, Screen.Height, // source size
  SrcCopy 
  );

在现有位图上设置较小的尺寸只会裁剪它。
您的意图是缩放位图。

StretchBlt 函数将位图从源矩形复制到目标矩形,必要时拉伸或压缩位图以适合目标矩形的尺寸。系统根据目标设备上下文中当前设置的拉伸模式来拉伸或压缩位图。

于 2013-06-20T06:06:28.263 回答