var   
      mdata:array[1..10000]   of   char;   
      k:integer;   
      p:   Pointer;   
      FStream:TMemoryStream;   
      Jpeg:TJPEGImage;   
  begin   
          FStream:=TmemoryStream.create;   
              Jpeg:=   TJpegImage.Create;   
              Jpeg.CompressionQuality:=50;     //压缩比   
              try   
                  Jpeg.Assign(Image10.Picture.Bitmap);   
                  Jpeg.SaveToStream(FStream);   
                  P:=FStream.Memory;   
                  FStream.Position:=0;   
                  for   k:=1   to   FStream.Size   do   mdata[k]:=pchar(dword(P)+k-1)^;   
                      IdUDPClient1.SendBuffer(mdata,FStream.Size);                                         //UDP   发送   
              finally   
                  Jpeg.Free;   
              end;   
        FStream.Free;
注意数据类型,我是想用cpp吧这个程序翻译用在builder里面。

解决方案 »

  1.   

    随手写的,没测试过  char mdata[9999];
    TMemoryStream*FStream = new TMemoryStream;
    TJpegImage* Jpeg = new TJpegImage;
    Jpeg->CompressionQuality = 50;
    try{
    Jpeg->Assign( Image10->Picture->Bitmap);
    Jpeg->SaveToStream( FStream );
    unsigned int* p = (unsigned int*)FStream->Memory;
    FStream->Position = 0;
    for(int k=0;k< FStream->Size ; k++ ){
    mdata[k] = p;
    }
    IdUDPClient1->SendBuffer(mdata,FStream->Size );

    }catch(...){

    }
    Jpeg->Free();
    FStream->Free();
      

  2.   

    Poiter是一种什么样的数据类型?还有你的P没有变动?FStream->Memory 是什么类型?
      

  3.   

    FStream->Memory 是void*类型
    Poiter也是void*
    我是看使用的方式才写上指定类型的        for(int k=0;k< FStream->Size ; k++ ){
                mdata[k] = p[k];//这里应该这样写,之前写错了
            }