01-07-2010, 11:56 PM
سأشرح :
السيرفر يقوم بالتقاط ضورة للشاشة كل 1 ثانية ، يحولها من صيغة BMP الى JPG ثم يخزنها في Stream
و يتم ارسالها الى client الذي يقوم باظهارها في المكون image
لكن أواجه العديد من الأخطاء و ها هو السورس :
السيرفر :
فيما يخص Client
private
{ Private declarations }
Reciving: boolean;
DataSize: integer;
Data: TMemoryStream;
التناقض الذي وقت فيه :
الصورة ترسل على شكل JPG كيف يتم استقبالها على شكل BMP و هو أول خطأ
فما الحل ؟
السيرفر يقوم بالتقاط ضورة للشاشة كل 1 ثانية ، يحولها من صيغة BMP الى JPG ثم يخزنها في Stream
و يتم ارسالها الى client الذي يقوم باظهارها في المكون image
لكن أواجه العديد من الأخطاء و ها هو السورس :
السيرفر :
PHP كود :
var
Img:TPicture;
ms:TMemoryStream;
JPG:TJPEGImage;
Bmp :TBitMap;
Rect:TRect;
begin
Img:=TPicture.Create;
Bmp := TBitMap .Create;
ms:=TMemoryStream.Create;
Img.Bitmap.Width:=Screen.Width;
Img.Bitmap.Height:=Screen.Height;
BitBlt(Img.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,GetDC(GetDesktopWindow),0,0,SrcCopy);
JPG:=TJPEGImage.Create;
try
JPG.Assign(Img.Bitmap);
JPG.CompressionQuality:=15;
Bmp.Width :=Jpg.Width -50;
Bmp.Height :=Jpg.Height -50;
Rect.Left :=0;
Rect.Top :=0;
Rect.Right :=Bmp.Width-1;
Rect.Bottom:=Bmp.Height-1;
Bmp.Canvas.StretchDraw(Rect,Jpg);
Jpg.Assign(Bmp);
jpg.savetostream(ms);
finally
bmp.Free;
img.free;
JPG.Free;
end;
فيما يخص Client
private
{ Private declarations }
Reciving: boolean;
DataSize: integer;
Data: TMemoryStream;
PHP كود :
procedure TForm1.client1Read(Sender: TObject; Socket: TCustomWinSocket);
var
s, sl: string;
begin
s:= Socket.ReceiveText;
if not Reciving then
begin
SetLength(sl, StrLen(PChar(s))+1);
StrLCopy(@sl[1], PChar(s), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TMemoryStream.Create;
Delete(s, 1, Length(sl));
Reciving:= true;
end;
try
Data.Write(s[1], length(s));
if Data.Size = DataSize then
begin
Data.Position:= 0;
Image1.Picture.Bitmap.LoadFromStream(Data);
Data.Free;
Reciving:= false;
Socket.Close;
end;
except
Data.Free;
end;
التناقض الذي وقت فيه :
الصورة ترسل على شكل JPG كيف يتم استقبالها على شكل BMP و هو أول خطأ
فما الحل ؟

