征求屏幕截屏时不调用API的方法
本人最近在研究屏幕截屏的技术,希望能有朋友可以帮我找到不调用API可以快速截屏的方法,目前我是用的截屏方法与大家分享,希望能有不调用API的截屏方法,谢谢啦:
procedure TFrm_Main.CopyScreen(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;
if (GetDeviceCaps(dc, RASTERCAPS) AND
RC_PALETTE = RC_PALETTE) then
begin
GetMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
FillChar(lpPal^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)), #0);
lpPal^.palVersion := $300;
lpPal^.palNumEntries :=GetSystemPaletteEntries(dc,0,256,lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then
begin
bm.Palette := CreatePalette(lpPal^);
end;
FreeMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
end;
BitBlt(bm.Canvas.Handle,0,0,Width,Height,Dc,x,y,SRCCOPY);
ReleaseDc(0, dc);
end;
[解决办法]
http://www.cvcphp.com/delphi_content.aspx?id=20100911054401&tip=%BD%D8%C6%C1DirectX