Q&A

  • 비트맵 형식으로 캡쳐하는 소스입니다. 문제점을 찾아주세요.
델 초보입니다.비트맵으로 캡쳐해서 다른 곳으로 보내는 소스거든요... 근데 캡쳐가 잘 안되서... 아래소스에 문제가 있는지 좀 봐주세요..

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;

이런 형식으로 보내거든요...문제점 있으면 가르쳐주세요..

0  COMMENTS