procedure TForm1.IdUDPServer1UDPRead(Sender: TObject;AData: TStream; ABinding: TIdSocketHandle);
var
  t_jpg:TJpegImage;
  t_ms:Tmemorystream;begin
try   try   
         t_ms:=Tmemorystream.Create;
         t_jpg:=Tjpegimage.Create   ;
         t_ms.LoadFromStream(Adata);
         t_jpg.LoadFromStream(t_ms)   ;
         t_jpg.JPEGNeeded;         Image1.Picture :=nil;
         Image1.Picture.Bitmap.Assign(t_jpg);//《---在这里出错,
     finally
          t_ms.Free;
          t_jpg.Free;
     end;  except
  end;
end;
高手麻烦帮解决下

解决方案 »

  1.   

    应装载JPG的时候流的顺序乱掉了t_ms.LoadFromStream(Adata); 
    t_ms.Seek(0,soBeginning);  //加上这句试试
    t_jpg.LoadFromStream(t_ms)  ; 
    t_jpg.JPEGNeeded; 
      

  2.   


    先判断一下jpg的文件头看是不是真正的jpg,否则白忙。
      

  3.   

    不行的话,可能是你客户端上床的图片有问题,或者是流的大小为0,
    if adata.size = 0 then exit; 加上判断
    t_ms.LoadFromStream(Adata); 
    t_ms.Seek(0,soBeginning);  //加上这句试试 
    t_jpg.LoadFromStream(t_ms)  ; 
    t_jpg.JPEGNeeded;
      

  4.   

    楼主找几张图片用loadfromfile试试
      

  5.   

     Image1.Picture.Bitmap.Assign(t_jpg);
    类型不对吧
      

  6.   

    引用JPEG了吗?或者有没有定义格式?
      

  7.   


      t_ms.position= 0;
      t_ms.LoadFromStream(Adata); 
      t_jpg.LoadFromStream(t_ms); 
      

  8.   


    image1.Picture.Assign(Jpg); //即可
      

  9.   

    //建议你把 jpg转换为bmp,之后直接赋值就可以了
    //jpg图片转化为bmp图片
    function JpgToBmp(jpg:tjpegImage;Var bmp:TBitmap):boolean;
    begin
      result:=true;
      try
        Bmp.Assign(jpg);
      except
        result:=false;
      end;
    end;//之后
      imgsource.Picture.Bitmap:=bitmap;
    //就可以了
      

  10.   

    8楼和11楼的办法是正确的。
    因为Image.Picuture.bitmap的类型是TBitmap的,与你的Jpeg类型不匹配。
    而Image.Picture是TCanvas类型的,与Jpeg是同一类型,可以赋值