zoukankan      html  css  js  c++  java
  • 用Delphi实现抓屏

    //调用方法
    procedure TForm4.BitBtn1Click(Sender: TObject);
    var
      tBM : TBitmap;
    begin
      tBM :
    = TBitmap.Create;
      ScreenShot(
    0,0,Screen.Width,Screen.height,tBM);
      tBM.SaveToFile(
    '.\ScreenShot.BMP');
      tBm.FreeImage;
      FreeAndNil(tBM);
      image1.Picture.LoadFromFile(
    '.\screenshot.bmp');
    end;

    //抓屏函数
    procedure TForm4.ScreenShot(x : integer; y : integer; Width : integer; Height : integer; bm : TBitMap);
    var
      dc: HDC; lpPal : PLOGPALETTE;
    begin
      
    // 检测所需抓屏的区域
      if ((Width = 0) or (Height = 0)) then exit;
      bm.Width :
    = Width;
      bm.Height :
    = Height;
      
    //获取设备上下文
      dc := GetDc(0);
      
    if (dc = 0) then exit;
      {
    do we have a palette device?}
      
    if (GetDeviceCaps(dc, RASTERCAPS) AND
        RC_PALETTE 
    = RC_PALETTE) then
        begin
        {allocate memory 
    for a logical palette}
        GetMem(lpPal, sizeof(TLOGPALETTE) 
    + (255 * sizeof(TPALETTEENTRY)));
        {zero it out to be neat}
        FillChar(lpPal
    ^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)), #0);
        {fill in the palette version}
        lpPal
    ^.palVersion := $300;
        {grab the system palette entries}
        lpPal
    ^.palNumEntries :=
          GetSystemPaletteEntries(dc,
    0,256,lpPal^.palPalEntry);
        
    if (lpPal^.PalNumEntries <> 0) then
        begin
          {create the palette}
          bm.Palette :
    = CreatePalette(lpPal^);
        end;
        FreeMem(lpPal, sizeof(TLOGPALETTE) 
    + (255 * sizeof(TPALETTEENTRY)));
        end;
      {copy from the screen to the bitmap}
      BitBlt(bm.Canvas.Handle,
    0,0,Width,Height,Dc,x,y,SRCCOPY);
      {release the screen dc}
      ReleaseDc(
    0, dc);
    end;
  • 相关阅读:
    MFC中L, _T(),TEXT,_TEXT区别以及含义
    Qt5完美解决 界面显示中文乱码
    TCP三次握手四次挥手详解
    TCP 长连接与短连接的区别
    Servlet 生命周期、工作原理
    Java反射的三种实现方式
    apache httpclient 4.5 兼容 http https
    mysql千万级大数据SQL查询优化
    Java String字符串补0或空格
    mysql存储过程
  • 原文地址:https://www.cnblogs.com/taobataoma/p/858251.html
Copyright © 2011-2022 走看看