Wenn du die genauen Anfangskoordinaten und den Zeichensatz kennst, brauchst du nur jedes sichtbare Zeichen des Zeichensatzes per Pixel zu vergleichen.
Hast du den ersten Buchstaben, dann kennst du die Breite und kannst mit dem nächsten Zeichen fortfahren.
Zur Beschleunigung könntest du dir vom Zeichensatz für jedes Zeichen eine Pixel-Checksumme bilden und die Breite vormerken.
Dann berechnest du an der aktuellen Position und Breite die Checksumme der Pixel und vergleichst sie mit der vorbereiteten Liste der Checksummen/Zeichenbreiten.
Evtl. müsstest du in der Liste manche Zeichen umsortieren, damit zB ein "W" nicht als "V" erkannt wird.
Pseudocode:
Delphi-Quellcode:
function TextLineAtBitmapPos(Bitmap: TBitmap; XPos, YPos: Integer): String;
result := '';
repeat
for width := MINWIDTH to MAXWIDTH do begin
checksum := CalcPixelChecksum(Bitmap, XPos, YPos, width);
foundChar := FindInList(width, checksum);
if foundChar <> #0 then begin
result := result + foundChar;
Inc(XPos, width);
break;
end;
end;
until foundChar = #0;
end;
Nur so eine Idee...