GetObject()函数可以获取指向bmp的指针,然后你可以随心所欲的操纵每个象素了。GetObject(Hbitmap, size, point)

解决方案 »

  1.   

    procedure TForm1.FormResize(Sender: TObject);
    var H1, H2: TagBitMap; p1, p2, p,pd: ^Integer;   i, j,d: Integer;
        spos, dpos: TPoint;
    begin
      dbm.Width:=Width;
      dbm.Height:=Height;  GetObject(sbm.Handle, Sizeof(H1), @H1);
      p1:=H1.bmBits;  GetObject(dbm.Handle, sizeof(H2), @H2);
      P2:=H2.bmBits;  for i:=0 to dbm.Width-1 do
        for j:=dbm.Height-1 downto 0 do
        begin
          DPos.X:=round(I*(sbm.Width)/(dbm.Width));
          DPos.Y:=round(J*(sbm.Height)/(dbm.Height));
          Pd:=Pointer( Integer(p2)+(dbm.Height-1-J)* h2.bmWidthBytes + I*4);
          d:= (sbm.Height-1-DPos.Y) * h1.bmWidthBytes +  DPos.X * 4;
          p:= Pointer(Integer(P1)+D);
          Pd^:=P^;
       End;
       self.Refresh;
    end; 
      

  2.   

    dbm是目的BMP, SBM是原图像BMP