Hello Aradeonas and Graeme
That's indeed a question of subpixel alignment.
If one draw a rectangle using integer coordinates (aliased), the top-left specifies the top-left pixel, and the bottom-right specifies the pixel outside of the rectangle. The idea is that the width and height are simply the difference between the bottom-right values and top-left values.
When using floating point coordinates, it depends how coordinates are defined, if they are centered on pixels or the top-left of a pixel. In BGRABitmap, the functions use pixel-centered coordinate. So using integers means in that case "in the middle of the pixel". To fill completely the pixel, one need to subtract 0.5 to the top-left values and also subtract 0.5 to the bottom-right values.
For example to fill exactly one pixel at the top-left of the bitmap, you would write FillRectAntialias(-0.5,-0.5,0.5,0.5,...)
When using coordinates that are not centered, you could use the same values as with the integer-parametered functions, so that would seem simpler at first glance. But when you would draw a line that is one-pixel wide, it would be blurred because the coordinate would be between pixels.
There is no perfect solution. Using pixel-centered coordinates is simpler when drawing lines, using non-centered coordinates is simpler when filling shapes.