Creo que depende de qué cosa sea el String
Firma. Estás manejando sus caracteres como si fuera el contenido binario de una imagen BMP (que además estás guardando con extensión .jpg).
¿Podrías darnos más detalles de cómo se obtiene ese String y decirnos también qué versión de Delphi utilizas?
Considera que el primer byte de valor 0 de la imagen binaria podría causar que el String quede truncado. Sería útil saber cómo se carga esa imagen en el String
Firma.
Un saludo.
Al González.