📄 my_streammanage.pas
字号:
unit My_StreamManage;
{
这个就是陈经韬一直来说的核心代码。
其实就是一个图片比较、压缩的过程。
我已经修改过了,原来他写的代码不安全,只要屏幕分辨率一变,就会出错!
因为前一幅图片和改变屏幕分辨率后的图片大小不一样!
}
interface
uses
Windows,Classes,Graphics,Forms,Controls,MainServer;
procedure My_GetScreenToBmp(DrawCur:Boolean;StreamName:TMemoryStream);
procedure My_CompareStream(MyFirstStream,MySecondStream:TMemorystream);
procedure My_ResumeStream(MyFirstStream,MySecondStream:TMemorystream);
implementation
procedure My_GetScreenToBmp(DrawCur:Boolean;StreamName:TMemoryStream);
var
Mybmp:Tbitmap;
dc: hdc;
Mycan: Tcanvas;
R: TRect;
begin
Mybmp := Tbitmap.Create; {建立BMPMAP }
Mycan := TCanvas.Create; {屏幕截取}
dc := GetWindowDC(0);
try
Mycan.Handle := dc;
R := Rect(0, 0, Screen.Width,Screen.Height{GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)});
Mybmp.Width := R.Right;
Mybmp.Height := R.Bottom;
Mybmp.Canvas.CopyRect(R, Mycan, R);
finally
releaseDC(0, DC);
end;
Mycan.Handle := 0;
Mycan.Free;
case Verycolored of
0:Mybmp.PixelFormat:=pf24bit; //24色
1:Mybmp.PixelFormat:=pf8bit; //256色
2:Mybmp.PixelFormat:=pf4bit; //256色
end;
Mybmp.SaveToStream(StreamName);
Mybmp.Free;
end;
procedure My_CompareStream(MyFirstStream,MySecondStream:TMemorystream);
var
I: Integer;
P1, P2, P3: ^Char;
MyTempBmp: TMemoryStream;
begin
MySecondStream.Clear;
My_GetScreenToBmp(False,MySecondStream);
MyTempBmp:=TMemoryStream.Create;
MyTempBmp.CopyFrom(MySecondStream,0);
P1 := MyFirstStream.Memory;
P2 := MySecondStream.Memory;
if MySecondStream.Size=MyFirstStream.Size then //图片大小不一样!
for I := 0 to MyFirstStream.Size - 1 do
begin
try
if P1^ = P2^ then P2^ := '0';
Inc(P1);
Inc(P2);
except
Break;
end;
end;
//--------------------------------------------------
MyFirstStream.Clear;
MyFirstStream.CopyFrom(MyTempBmp,0);
MyTempBmp.Free;
end;
procedure My_ResumeStream(MyFirstStream,MySecondStream:TMemorystream);
var
I: Integer;
P1, P2: ^Char;
begin
//---------------------------------------------
P1 := MyFirstStream.Memory;
P2 := MySecondStream.Memory;
for I := 0 to MyFirstStream.Size - 1 do
begin
if P2^ = '0' then P2^ := p1^;
Inc(P1);
Inc(P2);
end;
//---------------------------------------------
MyFirstStream.Clear;
MyFirstStream.CopyFrom(MySecondStream,0);
MySecondStream.Position:=0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -