Autor Beitrag
HellAngel28
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 03.07.03 10:19 
Hi,

ich weiss, es gibt viele posts über screenshot, doch das hilft mir nix:p Und zwar hab ich 2 TClientSOcket (beim client) laufen.. und 2 TServerSocket (beim server) laufen. das erste "paar" ist für die normale verständigung.. das 2. für die datenübertragung.. Der Client schickt den request, der server macht nen screenshot und soll ihn dann zum client senden.

CLIENT

Client (Get Screenshot Button)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TMainForm.GetScreenshotClick(Sender: TObject);
begin
if (Client.Active = true) then begin
        Client.Socket.Sendtext('Screenshot«');

end;
end;


Client (Recieve Screenshot)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TMainForm.StreamSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var  
  FStream: TFileStream;
  SizeOfFile: Integer;
  pBuffer: Pointer;
begin
  FStream := TFileStream.Create('C:\stream.bmp', fmCreate or fmOpenWrite);
  SizeOfFile := Socket.ReceiveLength;
  GetMem(pBuffer, SizeOfFile);
  try
    Socket.ReceiveBuf(pBuffer^, SizeOfFile);
    FStream.Write(pBuffer^, SizeOfFile);
  finally
    FreeMem(pBuffer);
    FStream.Free;
  end;
  if (FileExists('C:\stream.bmp')) then begin
//ScreenshotImage.Picture.LoadFromFile('C:\stream.bmp');
end;


SERVER

Server (Request Read):
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
procedure TMainForm.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var rec:string;
var inhalt:array [0..99of string;
var i:longint;

var  
  B : TBitmap;  

  var  
  FStream: TFileStream;  


begin
rec := socket.ReceiveText ;
i:=1;
while (Length(rec) >= 1do begin
        inhalt[i] := copy(rec,1,AnsiPos('«',rec)-1);
        delete(rec,1,length(inhalt[i])+1);
        i := i + 1;
end;

if (inhalt[1] = 'Screenshot'then begin
B := TBitmap.Create;
    GetScreenShot(B);
    Screenshotimage.Picture.Create.Assign(B);
    Screenshotimage.Picture.SaveToFile('C:\test.bmp');


  // Bitmap in JPEG

 

with TJPEGImage.Create do
  try
     //Performance:=jpBestQuality;
     CompressionQuality:=90;
     Assign(B);
     SaveToFile('C:\test.jpg');
  finally
    Free;
  end; // try, with

  }



    FStream := TFileStream.Create('C:\test.bmp', fmOpenRead);
    Screenstream.Socket.Connections[0].SendStream(FStream);
  Deletefile('C:\test.bmp');

end;
end;


Server:
Server = TServerSocket Port 992
Screenstream = TServerSocket Port 993


Client:
Client = TServerClient Port 992
StreamSocket = TServerClient Port 993


PROBLEM:
Er sendet nur 7KB von der datei (bmp ca 2mb oder so). und wenn ich es als JPG konvertiere dann hat es eine SEHR schlechte qualität.. total verschiedene farben.. deshalb ist es auch in { } eingerahmt..

thx im vorraus.. ich hoffe alles is klar und deutlich beschrieben.

Achja sollte ich jetzt irgendwelche grammatikalischen fehler gemacht haben, liegt das daran, dass ich seit ca 43 stunden wach bin:)
in diesem sinne.. guads nächtle :)

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 28.07.03 23:02 
Versuch mal meine TScreenShotClass, die ist zwar nonVCL aber leicht benutzbar. Und das mit den Sockets ist eben ein Problem. Du kannst die Datei sequentiell uebertragen. Also zB in 4kB-Stuecken.