

Short algoryth, I was bored for a while…
As Olly suggested I used floodfill.
The only inconvenience is that you need to predefine how many boxes is on the picture, but you haven't said you want to do it dynamically, so it's not a problem I hope?
program new;
var bmp,x,y,i,j,NumberOfBoxes,w,h,t:integer;
var TBA : TBoxArray;
var TPA : TPointArray;
begin
NumberOfBoxes := 2; // amount of boxes to find
bmp := BitmapFromString(445, 346, 'beNrt3FtuIkkQQFHjeq7' +
'C+18jL0+I0ISywe32gNG0K8/5QIw/RiI78pJVYL+8AAAAAAAAAAA' +
'AAAAAAADA9xqGoR7bJ9C5cRzjcZqm3BS73c6acDshy7KIJ9SOyMc' +
'wz3Nk8/X11cqQYhhiJOJdNcuZT6BndbaMI0Q002mTq3fVeg9tD5k' +
'76FhuinVdq5ZxonDaJB0v3huHwyEez9Cx3BR1LeaoSStm43Yq6pY' +
'O9Lw1ciMoJ1fijTWfzPNcHx1aFsjTZvtVE+WknY06XtaQuLtFz2p' +
'rxFEzN4Ubm1xlE/hka2gmsgmyiWyCbCKbIJvIJsgmsgmyiWwCsol' +
'sgmwimyCbyCbIJrIJsolsgmxiNgDZRDZBNpFNkE1kE2QT2QTZRDZ' +
'BNkE2QTaRTZBNZBNkE9kE2UQ2QTaRTbA1ZBPZBNlENkE2kU2QTWQ' +
'TZBPZBNlENgHZRDZBNpFNkE1kE2QT2QTZRDZBNjEbgGwimyCbyCb' +
'IJrIJsolsgmwimyCbIJsgm8gmyCayCbKJbIJsIpsgm8gm2BqyiWy' +
'CbCKbIJvIJsgmsgmyiWyCbCKbgGwimyCbyCbIJrIJsolsgmwimyC' +
'bmA2LALKJbIJsIpsgm8gmyCayCbKJbIJsWhBkE2QT2QTZRDZBNpF' +
'NkE1kE2QT2QRbQzaRTZBNZBNkE9kE2UQ2QTaRTZBNzAYgm8gmyCa' +
'yCbKJbIJsIpsgm3+JYRjqsX3CI7Ox+1c+73AdcpDGcawNMs+zM4a' +
'tsaXTZox3PC7LIp4POp/PVz+pfvZmmqbcIGrJ9rIZLyH2dQ55lDO' +
'fcHc2600nz1p9ZjNeeK1D7pGYK/2UzW1ks72Mag+ZO+5SF+k1G7m' +
'qva1DXr/UmdP1C1vK5vHivXE4HOLxzF1y9XJJ4z/j8XQ6dbie+ap' +
'PF7UU0iGb28hmvJbbq8g6KvDIVapFyHsUNWnOnLK5jd1RH2HM85y' +
'1dG/zEfUeFIloo9GbnKW6TRH2+73xkM3NnDbb42V9H8ldyvvUjc3' +
'2DN/nOtTb8e2uQTY381qeeq0aWym/i9LtF3I6v1Mhm7Ipm1+/aP3' +
'iD5FNZFM2/1NLkU1kUzavUqmWsolsyuYf5QfKL7/+mjayiWzK5u8' +
'sy+JboLIpm8jm1334m8jOnLKJbMrmH119j9EUySayKZu/MwxDXKf' +
'XX7fwW4eyiWxu47U86fOat7e3/D2RWKh1XSukpkg2kc0fKn8nvf0' +
'Vnm+/Nn/S/xnZRDb/x9fy4W8TP2n7+BqSbCKbm3ktzxAX5refBLm' +
'9KZvIpmz+8VLdCVM2LYhsyuZX1N8Ne/n1ryGZItlENn/0a3n2vc2' +
'rvzxphGQT2XTaBNlENkE2kU3ZRDaRTdlENpFN2UQ2kU3ZRDYtiGz' +
'KJsgmsgmyiWzKJrKJbMomsolsyiayiWzKJrJp0pBNkE1k0z8osol' +
'syiayiWzKJrKJbMomsolsyibIJrIJsolsGmZkE9mUTWQT2ZRNZBP' +
'ZlE1kE9mUTZBNZBNkE9mUTWQT2ZRNZBPZlE1kE9mUTWTTpMmmbIJ' +
'sIpsgm8imbCKbyKZsIpvIpmwim8imbIJsIpsgm8imYUY2kU3ZRDa' +
'RTdlENpFN2UQ2kU3ZBNlENkE2kU3ZRDaRTdlENpFN2UQ2kU3ZRDa' +
'RTdkE2UQ2QTaRzc9fyziO7cuJxx13idWrx3xSz3tbhzTPs2yysWy' +
'eTqcc8mVZMp7TNPknvltFYxiGfPfpcx1ylnJ3DBf7/d54yOZmTpu' +
'xtWOq2x/WCYFvuT7teRHqjSMm7WrMkM0f6ng8xoHzvRE/icczdzk' +
'cDu0axmMub2/rkK/6dFFLIR2yuY1sxiV5vYT2MOAu5X1yNvKIVZe' +
'oHa5n3S3Pez7OmWwpm/UScs7XdXVv8xFxrKpExJLWh2sdXp7XOuS' +
'AtW/QyOYGXlE10325x7N59ZM+s1nnzNcLg8GWsplHgrqkcjH1LbN' +
'x+32k3tRc1QaZ51k/bQ0HMz6fDUA2kU2QTWQTZBPZBNlENkE2kU2' +
'QTZBNkE1kE2QT2QTZRDZBNpFNkE1kE2wN2UQ2QTaRTZBNZBNkE9k' +
'E2UQ2QTaRTUA2kU2QTWQTZBPZBNlENkE2kU2QTcwGIJvIJsgmsgm' +
'yiWyCbCKbIJvIJsgmyCbIJrIJsolsgmwimyCbyCbIJrIJtoZsIps' +
'gm8gmyCayCbKJbIJsIpsgm8gmIJvIJsgmsgmyiWyCbCKbIJvIJsg' +
'mZgOQTWQTZBPZBNlENkE2kU2QTWQTZBNkE2QT2QTZRDZBNpFNkE1' +
'kE2QT2QRbQzaRTZBNZBNkE9kE2UQ2QTaRTZBNZBOQTWQTZBPZBNl' +
'ENkE2kU2QTWQTZBOzYRFANpFNkE1kE2QT2QTZRDZBNpFNkE0Lgmy' +
'CbCKbIJvIJsgmsgmyiWyCbCKbYGvIJrIJsolsgmwimyCbyCbIJrI' +
'JsonZAGQT2QTZRDZBNpFNkE1kE2QT2QTZBNkE2UQ2QTaRTZBNZBN' +
'kE9kE2UQ2wdaQTWQTZBPZBNlENkE2kU2QTWQTZBPZBGQT2QTZRDZ' +
'BNpFNkE1kE2QT2QTZxGwAsolsgmwimyCb/A2zMY5jOx7xuIOO1dY' +
'YLuJJ/hDC6XTKeViWJeM5TZNlgcpmnSuUk5qNGIacjTLPs5XB1sh' +
'9URdf1oR0PB7jwPneiJ/E4xk6lrugbltpJq24JK/b3e2Z090tepZ' +
'7YV3XCmZcgoknJbOZd29iTtzbhPYs4Z4VH6pmXs0M9Lwj6hsmedS' +
'0L2gvzGs8rj4bgs63Rlx8+RgdAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'ANu4fb59wOQ==');
GetBitmapSize(bmp,w,h);
i := 0;
while (i < NumberOfBoxes+1) do
begin
x:=random(w);
y:=random(h);
if FastGetPixel(bmp,x,y)=0 then
begin
inc(i);
FloodFillBitmap(bmp,Point(x,y),0,i);
writeln(i);
end;
end;
setlength(TBA,NumberOfBoxes);
t := GetImageTarget();
SetTargetBitmap(bmp);
for i:=0 to NumberOfBoxes do
begin
FindColors(TPA,i+1,0,0,w-1,h-1);
TBA[j] := GetTPABounds(TPA);
writeln((TBA[j].x2-TBA[j].x1));
if (TBA[j].x2-TBA[j].x1)< (w-6) then // this will eliminate background box
inc(j);
end;
SetImageTarget(t);
writeln(TBA);
end.