That is the slow way.
If you want to draw a portion that has size (sx,sy) into a bitmap of size (sx,sy), and that the upper coordinate in the source bitmap is (x,y), you can do :
dest := TBGRABitmap.Create(sx,sy);
dest.PutImage(-x,-y, source, dmSet);
...
dest.Free;
Maybe I should make a CopyRect procedures that does that.
In the meantime, you can use GetPart :
dest := source.GetPart(rect(x,y,x+sx,y+sy));
Which creates a new bitmap containing the portion you want.