var
  vHdc : HDC;
  vbitmap : TBitmap;
  pt : TRect;
begin
   vHDC := GetDC(0);
   GetWindowRect(Form2.Handle,pt);
   vbitmap := TBitmap.Create;
  try
    vbitmap.Width :=Form2.Width;
    vbitmap.Height := Form2.Height;
    BitBlt(vbitmap.Canvas.Handle,0,0,Form2.Width,Form2.Height,vHdc,pt.Left,pt.top,SRCCOPY);
    cxImage1.Picture.bitmap:=vbitmap;
//放到image去显示
    vbitmap.Assign(Image1.Picture.Bitmap);
    Self.ImageList1.Add(vbitmap,vbitmap);
  finally
    ReleaseDC(0,vHdc);
    FreeAndNil(vbitmap);
  end;小弟我用如上的代码抓取了一个Form2的图片(Form2在运行时大小可以调整),所以抓出来的图片有大有小,那么怎么将抓好的bmp统一将尺寸修改为128*128呢?就是看起来像一个缩略图一样。谢谢

解决方案 »

  1.   

    如果没有其他条件……用ACDSEE批量处理……嘿嘿。这个问题你应当搜索下,不能老是问同样的问题。
      

  2.   

    StretchBlt(目的图像句柄, 0, 0, 128,
          128, vbitmap.Canvas.Handle, 0, 0, vbitmap.Width,
          vbitmap.Height,  SRCCOPY);
      

  3.   

    StretchBlt(vbitmap.Canvas.Handle, 0, 0, 128,
          128, vHdc, 0, 0, Form2.Width,Form2.Height,  SRCCOPY);上边参数搞错了
    你试一下
      

  4.   

    StretchBlt,再不行,你就用图像控件吧,把抓到的图读到控件中,控件大小固定,自适应控件大小,然后通过控件保存
      

  5.   

    StretchBlt,再不行,你就用图像控件吧,把抓到的图读到控件中,控件大小固定,自适应控件大小,然后通过控件保存
      

  6.   

    方法多了,
    第一种:
      BitBlt(vbitmap.Canvas.Handle,0,0,Form2.Width,Form2.Height,vHdc,pt.Left,pt.top,SRCCOPY); 
     改为
      BitBlt(vbitmap.Canvas.Handle,0,0,128,128,vHdc,pt.Left,pt.top,SRCCOPY); 
    第二种:
      Image1.Stretch:=True;
      Image1.Width:=128;
      Image1.Height:=128;  
      

  7.   

    to  HeroicDragon 你的办法会造成只抓取128尺寸内的,而不是形成一个缩略图的。