想用GDI+做一个远程桌面,有几个问题要主教大家:1、用截屏函数BitBlt(bitmap.Canvas.Handle,0,0,scrW,scrH,GetWindowDC(GetDesktopWindow()),0,0,SRCCOPY );
只能放在TBitMap对象中,能不能直接TGPImage,如果不能直接,那要什么方法才能把截到的图放到TGPImage中2、TGPImage保存成流是IStream格式,如何才能转成TMemoryStream格式。谢谢

解决方案 »

  1.   

    1.
    var bitmap : tbitmap;
        gpbitmap : tgpbitmap;
    begin
      gpbitmap := tgpbitmap.create(bitmap.handle,0);
    end;2.
      var  Adapter : Istream;
           bmp : tgpbitmap;
           bitmap : tbitmap;
      bmp := TGpBitmap.Create(Adapter);
      bitmap := tbitmap.create;
      bitmap.handle := bmp.GetHBITMAP(0);
      freeandnil(bmp);
      
      

  2.   

    1,能不能不经过tbitmap对象中转,直接
    BitBlt(TGPImage对象???,0,0,scrW,scrH,GetWindowDC(GetDesktopWindow()),0,0,SRCCOPY );
      

  3.   

    2,bitmap.handle := bmp.GetHBITMAP(0);
    这句提示出错
    [Error] main.pas(88): Not enough actual parameters而且这句是TGPBitmap对象bmp里如果已经有上面得到的数据,那还Create?
      

  4.   

    版本不一至,加个参数0就可以了

    var Adapter : Istream;
      bmp : tgpbitmap;
      bitmap : tbitmap;
      bmp := TGpBitmap.Create(Adapter);

    这里只是示范istream如何转换为tgpbitmap再将tgpbitmap转换tmemorystream,
    直接创建内存流,将tgpbitmap锁定,拷贝内存,解锁,就可以了
      

  5.   

    如果我想在TGPBitmap后做一些缩放之类的操作
    GetThumbnailImage(48, 60, nil, nil);
    但它又要求是TGPImage对象才行?怎么办
      

  6.   

    用矩阵 TGpMatrix;旋转缩放位移
    TGpGraphics.SetTransform
    多查下资料吧
      

  7.   

    1楼已经给出了 gdi和gdi+图像的转换
    已经Istream的转换。想转换成TMemoryStream 在一楼代码中 加上var  ms:TMemoryStream ;
    Adapter:= TStreamAdapter.Create(Ms);
      

  8.   

    GDI+中,可以用最简单的控制 RECT 大小来缩放,哇嘎嘎