Alright.. Here is my failed attempt to do marpis' 5x5 tile method:
{$i SRL/SRL.scar}
{$i SRL/SRL/misc/Debug.scar}
const
CaptureX = 551;
CaptureY = 9;
MATCHES = 25;
// How many squares must match for Result to be True?
// There is 683 squares that can be used.
// 899 Squares in total, where 216 can't be used at all (runescape gui).
var
BigBitmap : Integer;
// Bitmap of minimap
SmallBitmaps : array [0..683] of Integer;
// BigBitmap exploded into 5x5 bits
function CheckPositionWithWorldMap(WorldMapPath : String): TPoint;
var
WM : Integer;
begin
VM := LoadBitmap(WorldMapPath);
//......
end;
// NOTE: TEMPORALY PROCEDURE. JUST USED TO SEE IF THIS ACTUALLY WORKS
procedure LoadBadPoints(var BadPoints : TPointArray);
begin
SetArrayLength(BadPoints, 216);
BadPoints[0] := Point(0, 0);
BadPoints[1] := Point(1, 0);
BadPoints[2] := Point(2, 0);
BadPoints[3] := Point(3, 0);
BadPoints[4] := Point(4, 0);
BadPoints[5] := Point(5, 0);
BadPoints[6] := Point(6, 0);
BadPoints[7] := Point(7, 0);
BadPoints[8] := Point(8, 0);
BadPoints[9] := Point(9, 0);
BadPoints[10] := Point(10, 0);
BadPoints[11] := Point(11, 0);
BadPoints[12] := Point(0, 1);
BadPoints[13] := Point(1, 1);
BadPoints[14] := Point(2, 1);
BadPoints[15] := Point(3, 1);
BadPoints[16] := Point(4, 1);
BadPoints[17] := Point(5, 1);
BadPoints[18] := Point(6, 1);
BadPoints[19] := Point(7, 1);
BadPoints[20] := Point(8, 1);
BadPoints[21] := Point(0, 2);
BadPoints[22] := Point(1, 2);
BadPoints[23] := Point(2, 2);
BadPoints[24] := Point(3, 2);
BadPoints[25] := Point(4, 2);
BadPoints[26] := Point(5, 2);
BadPoints[27] := Point(6, 2);
BadPoints[28] := Point(0, 3);
BadPoints[29] := Point(1, 3);
BadPoints[30] := Point(2, 3);
BadPoints[31] := Point(3, 3);
BadPoints[32] := Point(4, 3);
BadPoints[33] := Point(5, 3);
BadPoints[34] := Point(0, 4);
BadPoints[35] := Point(1, 4);
BadPoints[36] := Point(2, 4);
BadPoints[37] := Point(3, 4);
BadPoints[38] := Point(4, 4);
BadPoints[39] := Point(0, 5);
BadPoints[40] := Point(1, 5);
BadPoints[41] := Point(2, 5);
BadPoints[42] := Point(3, 5);
BadPoints[43] := Point(0, 6);
BadPoints[44] := Point(1, 6);
BadPoints[45] := Point(2, 6);
BadPoints[46] := Point(0, 7);
BadPoints[47] := Point(1, 7);
BadPoints[48] := Point(0, 8);
BadPoints[49] := Point(1, 8);
BadPoints[50] := Point(0, 9);
BadPoints[51] := Point(0, 10);
BadPoints[52] := Point(0, 11);
BadPoints[53] := Point(0, 12);
BadPoints[54] := Point(29-0, 0);
BadPoints[55] := Point(29-1, 0);
BadPoints[56] := Point(29-2, 0);
BadPoints[57] := Point(29-3, 0);
BadPoints[58] := Point(29-4, 0);
BadPoints[59] := Point(29-5, 0);
BadPoints[60] := Point(29-6, 0);
BadPoints[61] := Point(29-7, 0);
BadPoints[62] := Point(29-8, 0);
BadPoints[63] := Point(29-9, 0);
BadPoints[64] := Point(29-10, 0);
BadPoints[65] := Point(29-11, 0);
BadPoints[66] := Point(29-0, 1);
BadPoints[67] := Point(29-1, 1);
BadPoints[68] := Point(29-2, 1);
BadPoints[69] := Point(29-3, 1);
BadPoints[70] := Point(29-4, 1);
BadPoints[71] := Point(29-5, 1);
BadPoints[72] := Point(29-6, 1);
BadPoints[73] := Point(29-7, 1);
BadPoints[74] := Point(29-8, 1);
BadPoints[75] := Point(29-0, 2);
BadPoints[76] := Point(29-1, 2);
BadPoints[77] := Point(29-2, 2);
BadPoints[78] := Point(29-3, 2);
BadPoints[79] := Point(29-4, 2);
BadPoints[80] := Point(29-5, 2);
BadPoints[81] := Point(29-6, 2);
BadPoints[82] := Point(29-0, 3);
BadPoints[83] := Point(29-1, 3);
BadPoints[84] := Point(29-2, 3);
BadPoints[85] := Point(29-3, 3);
BadPoints[86] := Point(29-4, 3);
BadPoints[87] := Point(29-5, 3);
BadPoints[88] := Point(29-0, 4);
BadPoints[89] := Point(29-1, 4);
BadPoints[90] := Point(29-2, 4);
BadPoints[91] := Point(29-3, 4);
BadPoints[92] := Point(29-4, 4);
BadPoints[93] := Point(29-0, 5);
BadPoints[94] := Point(29-1, 5);
BadPoints[95] := Point(29-2, 5);
BadPoints[96] := Point(29-3, 5);
BadPoints[97] := Point(29-0, 6);
BadPoints[98] := Point(29-1, 6);
BadPoints[99] := Point(29-2, 6);
BadPoints[100] := Point(29-0, 7);
BadPoints[101] := Point(29-1, 7);
BadPoints[102] := Point(29-0, 8);
BadPoints[103] := Point(29-1, 8);
BadPoints[104] := Point(29-0, 9);
BadPoints[105] := Point(29-0, 10);
BadPoints[106] := Point(29-0, 11);
BadPoints[107] := Point(29-0, 12);
BadPoints[108] := Point(0, 29-0);
BadPoints[109] := Point(1, 29-0);
BadPoints[110] := Point(2, 29-0);
BadPoints[111] := Point(3, 29-0);
BadPoints[112] := Point(4, 29-0);
BadPoints[113] := Point(5, 29-0);
BadPoints[114] := Point(6, 29-0);
BadPoints[115] := Point(7, 29-0);
BadPoints[116] := Point(8, 29-0);
BadPoints[117] := Point(9, 29-0);
BadPoints[118] := Point(10, 29-0);
BadPoints[119] := Point(11, 29-0);
BadPoints[120] := Point(0, 29-1);
BadPoints[121] := Point(1, 29-1);
BadPoints[122] := Point(2, 29-1);
BadPoints[123] := Point(3, 29-1);
BadPoints[124] := Point(4, 29-1);
BadPoints[125] := Point(5, 29-1);
BadPoints[126] := Point(6, 29-1);
BadPoints[127] := Point(7, 29-1);
BadPoints[128] := Point(8, 29-1);
BadPoints[129] := Point(0, 29-2);
BadPoints[130] := Point(1, 29-2);
BadPoints[131] := Point(2, 29-2);
BadPoints[132] := Point(3, 29-2);
BadPoints[133] := Point(4, 29-2);
BadPoints[134] := Point(5, 29-2);
BadPoints[135] := Point(6, 29-2);
BadPoints[136] := Point(0, 29-3);
BadPoints[137] := Point(1, 29-3);
BadPoints[138] := Point(2, 29-3);
BadPoints[139] := Point(3, 29-3);
BadPoints[140] := Point(4, 29-3);
BadPoints[141] := Point(5, 29-3);
BadPoints[142] := Point(0, 29-4);
BadPoints[143] := Point(1, 29-4);
BadPoints[144] := Point(2, 29-4);
BadPoints[145] := Point(3, 29-4);
BadPoints[146] := Point(4, 29-4);
BadPoints[147] := Point(0, 29-5);
BadPoints[148] := Point(1, 29-5);
BadPoints[149] := Point(2, 29-5);
BadPoints[150] := Point(3, 29-5);
BadPoints[151] := Point(0, 29-6);
BadPoints[152] := Point(1, 29-6);
BadPoints[153] := Point(2, 29-6);
BadPoints[154] := Point(0, 29-7);
BadPoints[155] := Point(1, 29-7);
BadPoints[156] := Point(0, 29-8);
BadPoints[157] := Point(1, 29-8);
BadPoints[158] := Point(0, 29-9);
BadPoints[159] := Point(0, 29-10);
BadPoints[160] := Point(0, 29-11);
BadPoints[161] := Point(0, 29-12);
BadPoints[162] := Point(29-0, 29-0);
BadPoints[163] := Point(29-1, 29-0);
BadPoints[164] := Point(29-2, 29-0);
BadPoints[165] := Point(29-3, 29-0);
BadPoints[166] := Point(29-4, 29-0);
BadPoints[167] := Point(29-5, 29-0);
BadPoints[168] := Point(29-6, 29-0);
BadPoints[169] := Point(29-7, 29-0);
BadPoints[170] := Point(29-8, 29-0);
BadPoints[171] := Point(29-9, 29-0);
BadPoints[172] := Point(29-10, 29-0);
BadPoints[173] := Point(29-11, 29-0);
BadPoints[174] := Point(29-0, 29-1);
BadPoints[175] := Point(29-1, 29-1);
BadPoints[176] := Point(29-2, 29-1);
BadPoints[177] := Point(29-3, 29-1);
BadPoints[178] := Point(29-4, 29-1);
BadPoints[179] := Point(29-5, 29-1);
BadPoints[180] := Point(29-6, 29-1);
BadPoints[181] := Point(29-7, 29-1);
BadPoints[182] := Point(29-8, 29-1);
BadPoints[183] := Point(29-0, 29-2);
BadPoints[184] := Point(29-1, 29-2);
BadPoints[185] := Point(29-2, 29-2);
BadPoints[186] := Point(29-3, 29-2);
BadPoints[187] := Point(29-4, 29-2);
BadPoints[188] := Point(29-5, 29-2);
BadPoints[189] := Point(29-6, 29-2);
BadPoints[190] := Point(29-0, 29-3);
BadPoints[191] := Point(29-1, 29-3);
BadPoints[192] := Point(29-2, 29-3);
BadPoints[193] := Point(29-3, 29-3);
BadPoints[194] := Point(29-4, 29-3);
BadPoints[195] := Point(29-5, 29-3);
BadPoints[196] := Point(29-0, 29-4);
BadPoints[197] := Point(29-1, 29-4);
BadPoints[198] := Point(29-2, 29-4);
BadPoints[199] := Point(29-3, 29-4);
BadPoints[200] := Point(29-4, 29-4);
BadPoints[201] := Point(29-0, 29-5);
BadPoints[202] := Point(29-1, 29-5);
BadPoints[203] := Point(29-2, 29-5);
BadPoints[204] := Point(29-3, 29-5);
BadPoints[205] := Point(29-0, 29-6);
BadPoints[206] := Point(29-1, 29-6);
BadPoints[207] := Point(29-2, 29-6);
BadPoints[208] := Point(29-0, 29-7);
BadPoints[209] := Point(29-1, 29-7);
BadPoints[210] := Point(29-0, 29-8);
BadPoints[211] := Point(29-1, 29-8);
BadPoints[212] := Point(29-0, 29-9);
BadPoints[213] := Point(29-0, 29-10);
BadPoints[214] := Point(29-0, 29-11);
BadPoints[215] := Point(29-0, 29-12);
end;
procedure CaptureMinimap;
var
X, Y, I, L : Integer;
BadPoints : TPointArray;
P : TPoint;
begin
L := -1;
// NOTE: MUST FIND A BETTER WAY TO DEFINE WHICH POINTS ARE BADPOINTS!!!
LoadBadPoints(BadPoints);
// NOTE: MUST FIND A BETTER WAY TO DEFINE WHICH POINTS ARE BADPOINTS!!!
BigBitmap := BitmapFromClient(CaptureX, CaptureY, CaptureX + 150, CaptureY + 150);
// IT IS ALSO POSSIBLE TO MAKE IT BLACK AND WHITE ...
WriteLn('Captured minimap.');
for X := 0 to 29 do
for Y := 0 to 29 do
begin
if PointInTPA(Point(X, Y), BadPoints) then Continue;
Inc(L);
WriteLn(L);
SmallBitmaps[L] := CreateBitmap(5, 5);
FastDrawClear(SmallBitmaps[L], 0);
{//TEMPORALY METHOD OF 'EXPLODING' THE BIGBITMAP\\}
for P.X := 0 to 4 do
for P.Y := 0 to 4 do
FastSetPixel(SmallBitmaps[L], P.X, P.Y, FastGetPixel(BigBitmap, X*5+P.X, Y*5+P.Y));
{//TEMPORALY METHOD OF 'EXPLODING' THE BIGBITMAP\\}
DrawBitmapDebugImg(SmallBitmaps[L]);
end;
WriteLn('Exploded minimap to pieces.');
end;
begin
CaptureMinimap;
CheckPositionWithWorldMap(ScriptPath + 'worldmap.bmp');
end.
It's for Simba.
It successfully divides the Minimap into small pieces, but I have no idea how to find the small pieces on the worldmap
EDIT:
"BadPoints" are the part of the minimap box that has the runescape gui in it. Here is a example:

The red squares are the BadPoints.