程序如下:请教高手,帮忙看看哪里出了问题??      
       ss:=tcanvas.Create;
       FStream:=TMemoryStream.Create;
       ss.Handle:=getdc(0);
       sb:=Tbitmap.Create;
       //sb.Width:=BMPINFO.bmiHeader.biWidth;
       //sb.height:=BMPINFO.bmiHeader.biHeight;
       sb.Width:=screen.Width;
       sb.Height:=screen.Height;
       sb.PixelFormat:=pf16bit;
       bitblt(sb.Canvas.Handle,0,0,sb.width,sb.height,ss.Handle,0,0,srccopy);
       sb.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height),ss,Rect(0,0,Screen.Width,Screen.Height));
       ss.Free;
       image1.Picture.Bitmap:=sb; //*******************
       image1.Width:=sb.Width;
       image1.Height:=sb.Height;       FormClient.WindowState:=wsNormal;
       FormClient.show;
       jpgstream:=TJPEGImage.Create;
       jpgstream.Assign(sb);
       jpgstream.CompressionQuality:=10; //  压缩质量
       jpgstream.JPEGNeeded;
       jpgstream.Compress;
       //FStream.CopyFrom(AData,AData.Size);
       jpgstream.SaveToStream(FStream);  //保存为JPG流************888888
       jpgstream.Free;
       //FStream.Position:=0; //******
       //因为UDP数据包有大小限制,这里如果超出部分,就没有传输,完全可以发几次发出去
  FormClient.IdUDPClient1.BroadcastEnabled:=true;//用广播功能  if FStream.Size>FormClient.IdUDPClient1.BufferSize then
    begin
      FormClient.IdUDPClient1.SendBuffer(IPAddr,port,FStream.Memory^,FormClient.IdUDPClient1.BufferSize);
    end
  else
    begin
      FormClient.IdUDPClient1.SendBuffer(IPAddr,port,FStream.Memory^,FormClient.IdUDPClient1.BufferSize);    end;
  FStream.Free;
  sb.Free;

解决方案 »

  1.   

    现在好像是带宽的原因,如果把jpgstream.CompressionQuality:=10的值设的小点就会显示的多一些,目前发现
      

  2.   

    图像缩小:uses GdiPlus;
    var
      n: Single = 0.75; {缩放倍数}
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
      img: TGPImage;
      rt: TGPRectF;
    begin
      g := TGPGraphics.Create(Self.Canvas.Handle);
      img := TGPImage.Create('C:\temp\test.png');  g.DrawImage(img, 4, 4, img.GetWidth, img.GetHeight);  rt := MakeRect(4+img.GetWidth+4, 4, img.GetWidth * n, img.GetHeight * n);  g.SetInterpolationMode(TInterpolationMode);
      g.DrawImage(img, rt, 0, 0, img.GetWidth, img.GetHeight, UnitPixel);  img.Free;
      g.Free;
    end;
    TInterpolationMode:
    InterpolationModeInvalid             = -1; {等效于 QualityMode 枚举的 Invalid 元素. }
    InterpolationModeDefault             = 0;  {指定默认模式. }
    InterpolationModeLowQuality          = 1;  {指定低质量插值法. }
    InterpolationModeHighQuality         = 2;  {指定高质量插值法. }
    InterpolationModeBilinear            = 3;  {指定双线性插值法. 不进行预筛选. 将图像收缩为原始
                                                      大小的 50% 以下时,此模式不适用. }
    InterpolationModeBicubic             = 4;  {指定双三次插值法. 不进行预筛选. 将图像收缩为原始
                                                      大小的 25% 以下时,此模式不适用. }
    InterpolationModeNearestNeighbor     = 5;  {指定最临近插值法. }
    InterpolationModeHighQualityBilinear = 6;  {指定高质量的双线性插值法. 执行预筛选以确保高质量
                                                      的收缩.  }
    InterpolationModeHighQualityBicubic  = 7;  {指定高质量的双三次插值法. 执行预筛选以确保高质量
                                                      的收缩. 此模式可产生质量最高的转换图像. }摘自:http://www.cnblogs.com/del/archive/2008/07/03/1234641.html
      

  3.   

    有源码自己去看看
    http://iamgyg.blog.163.com/