RectWidth:=RightPos-LeftPos;
RectHeight:=BottomPos-TopPos;
SourceDC:=CreateDC('DISPLAY',nil,nil,nil);
DestDC:=CreateCompatibleDC(SourceDC);
Bhandle:=CreateCompatibleBitmap(SourceDC,RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,LeftPos,TopPos,SRCCOPY);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=BHandle; Bitmap.SaveToFile ('C:\Log');
Bitmap.LoadFromFile('C:\Log'); //为什么不用这两句会出错? Jpeg:=TJpegImage.Create ;
Jpeg.Assign (Bitmap);
Jpeg.JPEGNeeded ;
jpeg.CompressionQuality :=Quality;
jpeg.Compress ;
Jpeg.SaveToStream (BmpStream);
//BitMap.SaveToStream(BmpStream);
BmpStream.Position:=0;
LeftSize:=BmpStream.Size;
Jpeg.Free;
Bitmap.free;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);怎样利用api截取屏幕后,在内存中转换为jpg图像格式,使用Stream?
RectHeight:=BottomPos-TopPos;
SourceDC:=CreateDC('DISPLAY',nil,nil,nil);
DestDC:=CreateCompatibleDC(SourceDC);
Bhandle:=CreateCompatibleBitmap(SourceDC,RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,LeftPos,TopPos,SRCCOPY);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=BHandle; Bitmap.SaveToFile ('C:\Log');
Bitmap.LoadFromFile('C:\Log'); //为什么不用这两句会出错? Jpeg:=TJpegImage.Create ;
Jpeg.Assign (Bitmap);
Jpeg.JPEGNeeded ;
jpeg.CompressionQuality :=Quality;
jpeg.Compress ;
Jpeg.SaveToStream (BmpStream);
//BitMap.SaveToStream(BmpStream);
BmpStream.Position:=0;
LeftSize:=BmpStream.Size;
Jpeg.Free;
Bitmap.free;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);怎样利用api截取屏幕后,在内存中转换为jpg图像格式,使用Stream?
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s,s1:string;
desk:tcanvas;
bitmap:tbitmap;
jpg:tjpegimage;
begin
s:=socket.ReceiveText;
if s='gets' then //file://客户端发出申请
begin
try
m1:=tmemorystream.Create;
bitmap:=tbitmap.Create;
jpg:=tjpegimage.Create;
desk:=tcanvas.Create; //以下代码为取得当前屏幕图象
desk.Handle:=getdc(hwnd_desktop);
with bitmap do
begin
width:=screen.Width;
height:=screen.Height;
canvas.CopyRect(canvas.cliprect,desk,desk.cliprect);
end;
jpg.Assign(bitmap); //file://将图象转成JPG格式
jpg.CompressionQuality:=10;//文件压缩大小设置
//m1.clear;
jpg.SaveToStream(m1); //file://将JPG图象写入流中
jpg.free;
m1.Position:=0;
s1:=inttostr(m1.size);
Socket.sendtext(s1); //file://发送图象大小
finally
bitmap.free;
desk.free;
end;
end;
if s='okok' then //file://客户端已准备好接收图象
begin
m1.Position:=0;
Socket.SendStream(m1); //file://发送JPG图象
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.open;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.close;
end;end.
bitmap:TBitmap;
Stream:TStringStream;
Jpeg:TJPEGImage;
dc:HDC;
begin
bitmap := TBitmap.Create;
Jpeg:=TJPEGImage.Create;
Stream:=TStringStream.Create('F:\3.txt');
try
bitmap.Width:=200;
bitmap.Height:=200;
dc:=GetDC(0);//屏幕
BitBlt(bitmap.Canvas.Handle,0,0,200,200,dc,0,0,SRCCOPY);
Jpeg.Assign(bitmap);
jpeg.CompressionQuality :=75;
jpeg.Compress ;
Jpeg.SaveToStream(stream); //Jpeg.SaveToFile('F:\1.jpg');
finally
Jpeg.Free;
Stream.Free;
bitmap.Free;
end;