Q&A

  • bitmap->jpg 를 Tcp소켓으로 전송시
procedure Tvchatroomfrm.MycSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
    Receivejpg     : TJpegImage;
begin
    Receivejpg := TJpegImage.Create;
    Socket.ReceiveBuf(Receivejpg,sizeof(socket.ReceiveLength));
    image1.Picture.Graphic := Receivejpg;
    Receivejpg.free;
end;
procedure Tvchatroomfrm.MyScreenFrameCallback(sender: TObject; lpVhdr: PVIDEOHDR);
var
    vv          : TBitmapInfo;
    nSize,nLoop : Integer;
    Sendjpg     : TJpegImage;
begin
    if MysSocket.Socket.ActiveConnections > 0 then begin
        if ((iIncFrame mod iPtnFrame) = 0) Then Begin
            vv := MyScreen.BitMapInfo;              // 중요함...
            FrameToBitmap(bitmap, lpvhdr.lpData, vv);

            Sendjpg := TJpegImage.Create;
            Sendjpg.Assign(bitmap);

            for nLoop := 0 to MysSocket.Socket.ActiveConnections - 1do begin
                MysSocket.Socket.Connections[nLoop].SendBuf(Sendjpg,sizeof(Sendjpg));
                Sendjpg.free;
            end;
        End;
    end;
    inc(iIncFrame);
end;

MyScreenFrameCallback-> Tvideo 이벤트인데요
화상캠이 캡춰될때마다 이메소드가 실행되는데 소스에서보시면아시겟지만
캡춰해서 비트맵으로만들고 이걸 jpg로만들어서 전송을 합니다.
이걸 클라이언트소켓이 Readbuf해서 jpg를 이미지보여주는 콤포넌트에
넣어주는데 에러가나네요.
보내주는소켓에서 보내주는패킷으로 다른 이미지콤포넌트에다가
보면 제대로 jpg가 나오는데 이상하네요
문제점을 아시는분은 강한 태클부탁드립니다.
2  COMMENTS
  • Profile
    정동욱 2004.10.21 01:43



    [...]

    한마디로 엄청난 벌레를 만들었네요.

    SendBuf(Sendjpg,sizeof(Sendjpg));
    이 문장은 말이 않됩니다.
    에러는 않 나지만 치명적인 벌레 입니다.
    백날 보내봐야 데이타는 가지 않습니다
    sizeof(Sendjpg) 를 실제 보세요 몇 바이트 인지.

      Sendjpg.SaveToStream(Stream);
      SendBuffer( Stream.Memory ,Stream.Size );
      
      물론 SendStream(...) 도 되겠죠.

    이렇게 해야 실제 그림이 보내 집니다.
    당근 받는것도 역순으로 해야 됩니다.


  • Profile
    우용우 2004.10.21 02:49
    답변 감사드립니다.
    아직 기량이 부족해서
    Sizeof 에 에러가있을줄 꿈에도몰랐습니다..ㅜ.ㅜ
    헌데 님이 제시해주신 방향으로 코딩을 하다가
    또 어려움에 빠져서 다시 이렇게 손을 내미네요..ㅜ.ㅜ
    대충 갈피는 잡겟는데
    영 손이 가질 앉습니다.
    보내는쪽과 받는쪽의 간단한 소스예제좀 부탁드립니다.
    그럼 이만..
    • 김진태
    • 2004.10.22 08:44
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김진태
      2004.10.23 02:43
    • 이영주
      2004.10.22 22:04
      재미 있을것 같아 만들어 보았습니다. 좀 거친듯한 느낌은 드는군요. 메모장의 메뉴를 참고하였습니다. ...
    • 권오현
      2004.12.23 01:55
      안녕하세요. 저도 님과 같은 궁금증 있어 아래와 같이 해보니 그런대로 원하는 동작이 되더라구요. ...
    • 김민우
    • 2004.10.22 06:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 권태훈
      2004.10.22 22:54
      var   a1,a2 : String;   answer : Integer;   r1 : String; begin ...
    • Maru
      2004.10.22 06:32
      저는 이거 하루종일 고민하여.(글올리고 답글달기까지 고민함 -_-), 누군가 레지스트리를 건드려서 가...
    • 박준영
      2004.10.23 20:52
      혼자서 별짓 다해보다가 눈가리고 아웅인지는 모르지만 해결을 했습니다. 제가 Text 필드를 UpDate 쿼리...
    • 일그니
      2004.10.21 20:27
      Copy, POS, Length 이 세개의 함수를 이용하시면 무난 하실것 같습니다.
    • 최수림
    • 2004.10.21 19:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정동욱
      2004.10.21 21:05
      [...] 1.어느쪽이 클라이언트 역할을 하느냐?. 2.최소한 초단위 보다 더빨리 모니터링 해야 한다,...
    • 송득보
    • 2004.10.21 18:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김일득
      2004.11.16 00:43
      Thread에서 TQuery 등의 VCL콤포넌트를 사용하기위해서는 TDataBase코포넌트와 VCL 콤포넌트를 1:1...
    • 정동욱
      2004.10.21 19:12
      [...] http://www.overbyte.be  에 가면 francois piette 라는 사람이 만든 MidWare ...
    • 강신구
    • 2004.10.21 18:20
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.10.21 18:44
      값을 확인 할 수 가 없어서 잘은 모르겠지만 아래와 같이 하면 됩니다. ==============================...
    • 강신구
      2004.10.21 19:43
      답변에 감사드립니다.. 답변주신 내용에서 한가지 빠진 부분이 있어서 추가 질문을 드립니다.. C함수...
    • 석주현
      2004.10.21 20:34
      흐흐 그걸 빼 놓았네요.. 아래에 추가 했습니다... 간단하게 포인터 증가는 inc(포인터명) 이걸 씁니다...
    • 강신구
      2004.10.21 21:48
      감사합니다.. 해결되었습니다.. 많은 도움이 되었습니다..
    • 하얀까마귀
      2004.10.21 18:26
      전체 필드나 전체 레코드가 바뀐건 님께서 루틴을 잘못만드신걸로 보이네요.. 밑에 있는 루틴은 참고 하...
    • 석주현
      2004.10.21 18:12
      다른 분이 해주신거에서 조금만 고치면 되는건데 -_-;; 아래 고친 거 입니다. 잘만 확인 하시면 바로 활...
    • 박원용
      2004.10.21 20:43
      아~~ 이제 정말 잘되네요... 갑자기 프로그램을 만들다보니.. 모르는것이 너무 많아서. 헤헤.. 답변...
    • 깜찌기
    • 2004.10.21 09:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.10.21 18:19
      Direct Input 을 이용하시면 간단하게 해결됩니다. 음 예전에 올라와 있던 DelphiX 같은 VCL 팩키지를 ...
    • 기타맨
    • 2004.10.21 02:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.21 18:37
      다른 문제겠죠? 해당 폼 내의 다른 루틴상의 문제라고 생각되어 지네요. ㅠㅠ 채팅폼의 루틴을 하나하...
    • 황영신
    • 2004.10.21 01:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 우용우
    • 2004.10.21 00:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정동욱
      2004.10.21 01:43
      [...] 한마디로 엄청난 벌레를 만들었네요. SendBuf(Sendjpg,sizeof(Sendjpg)); 이 문장은 말...
    • 우용우
      2004.10.21 02:49
      답변 감사드립니다. 아직 기량이 부족해서 Sizeof 에 에러가있을줄 꿈에도몰랐습니다..ㅜ.ㅜ 헌데 님이 ...
    • 이근석
    • 2004.10.20 23:40
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.22 04:07
      안녕하세요 하얀까마귀 입니다.. 요즘 디비라고는 안해서 통~~~~ ㅎㅎ 손놓은지 수년이네요. 3-4년 되는...
    • 석주현
      2004.10.21 18:22
      전 델파이에선 그런 경우가 없었는데 씨 빌더에서 하다 보니 저번에 ParamBy 를 이용해서 파라메터 ...
    • 최성준
      2004.10.21 00:07
      1. 변수에 담아서 해보세요 예) temp := '''A'',''B''';
    • 이근석
      2004.10.21 00:18
      변수에 대입 방법을 써 보았지만 안돼는군요. (ㅜ.ㅜ)
    • 정동욱
      2004.10.21 02:08
      [...]   FormatDateTime( 'hh:nn:ss' ,  IncMinute( Now , 1 ) );  &n...
    • 석주현
      2004.10.21 01:08
      procedure TForm1.Button1Click(Sender: TObject); var   StartTime, EndTime, AddTime : TDat...
    • 석주현
      2004.10.21 00:39
      StartTime, AddTime,EndTime : TDateTime 로 선언 하시고 EncodeTime 으로 각각 인코드 해서 넣어 ...
    • 김정현
    • 2004.10.20 22:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.10.21 01:29
      안녕하세요. 최용일입니다. 소스가 없으면 불가능합니다. 델파이는 이진호환이 안됩니다. dcu, b...
    • 김정현
      2004.10.21 01:47
      에고...그럼 혼자 쇼를 했네요 ^^ 답변 정말 감사합니다. 다시 공부하고 오겠습니다. 최용일님 하루...
    • 최용일
      2004.10.20 21:48
      안녕하세요. 최용일입니다. OnKeyDown에서 하세요... if Key = VK_RETURN then    &...
    • 고진중
      2004.10.20 23:08
      답변 감사합니다.. 그런데 답변하신 내용은 질문전에 해봤던건데 안되요 ㅜㅜ
    • 최용일
      2004.10.21 01:21
      안녕하세요. 최용일입니다. 어떤것을 원하는지 잘 모르겠네요... 아래 코드는 일반적인 컨트롤이나 ...