델 초보입니다.비트맵으로 캡쳐해서 다른 곳으로 보내는 소스거든요... 근데 캡쳐가 잘 안되서... 아래소스에 문제가 있는지 좀 봐주세요..
procedure TVideoForm.GetScreenCapture;
var
sPath: String;
A: array [0..255] of Char;
bmp: TBitmap;
jpg: TJPEGImage;
begin
try
sPath := GetSystemFilePath+'';
IsImagesDirectory(sPath);
capFileSaveDIB(ghCapWnd, Longint(StrPCopy(A, sPath)));
bmp := TBitmap.Create;
bmp.LoadFromFile(spath);
jpg := TJPEGImage.Create;
jpg.CompressionQuality := 100;
jpg.Assign(bmp);
// jpg.SaveToFile(copy(sPath,1,length(sPath)-4)+'.jpg');
CopyPChar(OrgJpeg, PChar(jpg), FullJpgSize);
jpg.Free;
bmp.free;
GoScreen;
end;
finally
GoScreen;
end;
CurrentBmp := OrgJpeg;
TotalSendSize := 0;
SendNextBuf;
캡쳐한다음....
procedure TVideoForm.SendNextBuf;
var
prot : ^Protocol;
DSize, SendSize, i: integer;
begin
if ClientCount=0 then exit;
SendSize := 2048; // 프로토콜의 크기
DSize := 2040; // 실제 전송되는 비트맵 크기
if FullJpgSize - TotalSendSize < DSize then
DSize := FullJpgSize - totalSendSize;
// 프로토콜 셋팅
prot := GlobalAllocPtr(GHND, SendSize);
// GetMem(prot, SendSize);
prot^.SendSize := DSize; // 순수 데이타 사이즈
if TotalSendSize = 0 then // 첫번째 보낼때
prot^.ImgSize := FullJpgSize // 비트맵 전체 사이즈
else prot^.ImgSize := 0;
CopyPChar(@prot^.ImgData, CurrentBmp, DSize);
SB_Message.Panels[0].Text := 'Sending : ' + IntToStr(FullJpgSize) + ' Bytes';
// for i := 0 to ClientCount - 1 do begin
for i := 0 to CCTV_ServerSocket.Socket.ActiveConnections - 1 do begin
try
if ClientIPList.Items.Count>0 then
CCTV_ServerSocket.Socket.Connections[i].SendBuf(prot^, SendSize);
isReceived[i] := False;
except
break;
end;
end;
GlobalFreePtr(prot);
// FreeMem(prot, SendSize);
CurrentBmp := CurrentBmp + DSize;
svSendSize := DSize;
TotalSendSize := TotalSendSize + DSize;
end;
이런 형식으로 보내거든요...문제점 있으면 가르쳐주세요..