Aquí está el problema. Tengo un gran conjunto de mosaicos JPEG de 512x512 píxeles como archivos jpg normales.¿Cómo escribir un gran archivo JPEG que excede la memoria RAM física utilizando Delphi?
He escrito una pieza de software que hace un montón de cosas y necesita unir todos esos archivos en un solo archivo JPEG al final.
En primer lugar, NO deseo utilizar ImageMagick para hacer esto, ¡pero realizarlo dentro de mi software!
En Delphi no es posible copiar un archivo JPG en otro lienzo JPG, por lo que se debe crear un TBitmap primero, luego los mosaicos se copian en el lienzo TBitmap y el TBitmap se convierte en una imagen JPEG y se guarda en un archivo.
El problema surge cuando las dimensiones del archivo resultante son demasiado grandes (como 20 000 x 20 000 píxeles). Cuando llamo a TBitmap.SetSize, naturalmente, obtengo un error (falta de memoria o algo como esto).
Realicé algunas pruebas utilizando Photoshop en la misma máquina y pude crear un archivo complejo (no en blanco) de 30 000 x 30 000 y guardarlo en JPEG.
Entonces la pregunta es, ¿cómo podría hacer lo mismo? Fing de alguna manera para suturar todos esos JPEGS escribiendo el resultado directamente en el disco o utilizar algún otro truco? ...
Aunque 20k x 20k píxeles parece lo suficientemente grande, este valor solo se aplica a mi máquina (4 GB ram) por lo que una menor cantidad de RAM sería aún más limitante para el software.
Gracias
Edit: Para aclarar:
Lo que me gustaría es encontrar una manera de costura esas pequeñas imágenes JPG y escribir el grande sin mantener la imagen grande en la memoria RAM. Aparentemente, una lectura/escritura de una secuencia de mapas de bits es posible directamente en el disco (no estoy seguro), pero esto daría como resultado un archivo MUY grande. Entonces, si el formato JPG no permite hacer esto, haría cualquier otro formato comprimido como TIFF o PNG. También me gustaría evitar demasiada recompresión para no perder la calidad JPG inicial (ya comprimida).
Por lo tanto, la solución perfecta sería una forma de leer directamente los archivos pequeños y escribir en el grande de alguna manera. Las dimensiones de las teselas son de 256x256 o 512x512 en caso de que ayudaran a alinear algo de compresión JPEG.
Sabía que esto saldría a la luz, pero no, como dije anteriormente, soy capaz de abrir una imagen más grande y trabajar en Photoshop;) – Alexander