Q&A

  • 이미지 소켓 전송에 관해서 질문 드립니다.
웬만한 문제는 이곳에서 검색해서
다 해결해 보았는데..
요번은 잘 안돼네요.......

여러가지 자료를
1  COMMENTS
  • Profile
    Mr. Ziker 2002.02.17 19:15
    안녕하세욤!

    받는 부분에서  스트림으로 못 받는거 같은데요.. 보낼때
    SendStream으로 보내는게 맞지 않을까..

    아마도 그 에러가... 받는 부분의 포지션 잡을때 에러가 날겁니다.
    없는데이터가 날아 가기 때문에 그런거 같거든요.. ^^;;;

    답이 못 되드린거 같네욤.. 스트림은 인디 소켓이 더 조은거 같던데... 아닌감? ^^

    다른 고수분들의 의견을 기다리면서.. 총총총..

    참고로 소스 하나 올릴께요..  (인디소켓으로 비슷한 부분입니다)


    procedure TfmClient.Timer1Timer(Sender: TObject);
    Var
         Bmp         : TBitmap;
         Stream      : TMemoryStream;
         Jpeg        : TJpegImage;
         BitmapRect  : TRect;
         VideoDC     : HDc;
         VideoCanvas : TCanvas;
         TempSize    : integer;
    begin

         if video1.DriverOpen then begin
           try
               jpeg         := TJpegimage.Create;
               Bmp          := TBitmap.Create;
               Stream       := TMemoryStream.Create;
              
              
               .....
               .....
               .....

               Bmp.Width    := video1.width;
               Bmp.Height   := video1.Height;
               BitmapRect   := Rect(0,0,160,120);

               VideoDC      :=  GetDc(Video1.Handle);
               VideoCanvas  := TCanvas.Create;
               VideoCanvas.Handle := VideoDC;

               Bmp.Canvas.CopyRect(BitmapRect, VideoCanvas, BitmapRect);

               Jpeg.Assign(Bmp);
               Jpeg.CompressionQuality := 30;
               Jpeg.Compress;
               Stream.Clear;
               Jpeg.SaveToStream(Stream);
               Stream.Position := 0;
               =========================================>보내는부분
               TempSize := SizeOf(Stream);
               Label2.Caption := IntToStr(Stream.Size);
               IdTCPClient.WriteStream(Stream, True, True);


             finally
               ReleaseDC(Video1.handle, VideoDC);
               VideoCanvas.Free;
               Bmp.Free;
               jpeg.Free;
               stream.Free;
             end;
         end;
    end;



    ========================>>> 받을때...........

    procedure TfmClient.IdTCPServerExecute(AThread: TIdPeerThread);
    var
    Stream: TMemoryStream;
    Jpeg  : TJpegImage;
    TempSize: Integer;
    begin
    Stream:= TMemoryStream.Create;
    Jpeg  := TJpegImage.Create;
    try
       AThread.Connection.ReadStream(Stream, -1, False);
       Stream.Position := 0;
       Jpeg.LoadFromStream(Stream);
       Image1.Picture.Assign(Jpeg);
    finally
       Jpeg.Free;
       Stream.Free;
    end;
    end;