程序如下:请教高手,帮忙看看哪里出了问题??
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;
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;
解决方案 »
- 在哪买正版的delphi2007或者delphi2010?
- 初学者求救!!!!!
- Rave报表用RvQueryConnection连接的问题
- 如何对给出的一组数据拟合出方程式?
- PopupMenu中使用ImageList,在菜单项高亮时图片底色为何不透明?
- NT註冊/啓動問題請教
- 关于流,在线给分!
- 100分求救!当DLL Form关闭的时候主程序的MainForm就跟着最小化。烦死人!
- 我用ADO +TCP/ip访问sql2000 server,如果访问非缺省端口的sql2000server?
- 我需要给一个字段一次加入许多条纪录,我该用什么控件,是DBComboBox吗?
- Socket 缓冲区空间不足
- 哪位在DELPHI下做过VNC的程序?急需。。。
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
http://iamgyg.blog.163.com/