2011-11-25 12 views
6

Actualmente estoy trabajando en un software de mosaico de fotos de código abierto C# (Sourceforge Link). Este software une grandes cantidades de pequeñas fotos (mosaicos) en una imagen grande.C#: Guardando archivos JPG en partes

Dado que el tamaño de la imagen final suele ser del orden de 20k px por 15k px, solo guardo un mapa de cómo colocar las fichas en la memoria. Para construir la imagen final, la estoy construyendo en partes, es decir, en una banda de 8 líneas (puede también en cualquier otro número).

En el caso de los bmps, esta información puede guardarse fácilmente por partes, primero escribiendo un encabezado bmp y luego añadiendo los datos ARGB a este archivo.

Pero los bmps resultantes son demasiado grandes para un manejo posterior (por ejemplo, entregándoselos a una empresa de impresión de carteles). Por lo tanto, me gustaría guardar estas imágenes grandes como jpgs en mi disco duro.

El problema ahora es que, como jpgs están comprimidos, escribir los datos en fragmentos parece muy complicado (la función normal Bitmap.Save() cargará primero la imagen completa en la memoria y por lo tanto no es aplicable), ya que , los datos RGB no comprimidos no lo harán.

La funcionalidad básica de escribir jpgs en party debería existir, ya que, por lo que sé, el algoritmo de compresión de jpg funciona con fragmentos o 8x8 px.

Busqué en varias bibliotecas de imágenes (FreeImage, GraphicsMagick, LibTiff.NET) para encontrar soluciones para este problema, pero no pude encontrar ninguna. LibTiff básicamente tiene la funcionalidad deseada, pero solo para el formato de imagen tiff.

¡Muchas gracias por su ayuda! Max

Respuesta

1

Como no mencionó OpenJPEG library, pensé que se podría haber perdido.

http://www.openjpeg.org/

Por supuesto que se necesitan algunas envolturas alrededor, pero creo que se puede lograr lo que quiere hacer uso de esa biblioteca. Pero esta no es la solución más fácil, lo sé. Si a otra persona se le ocurre una sugerencia mejor y más fácil, puede omitir esta biblioteca.

Editar: Esto se ve muy incompleto, pero puede ser útil ya que es código C#. http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

+0

Gracias, de hecho me lo perdí. Lo comprobará lo antes posible! – mgulde

+0

Hmm, resulta que OpenJPEG es básicamente solo para la conversión JPEG a JPEG2K y viceversa. El codificador simple es una buena solución, aunque parece muy complicado;) – mgulde

+0

Hmm, _does_ la biblioteca openjpeg admite E/S incrementales? Lo miré un poco (aunque los documentos son muy mínimos), y todas las interfaces de E/S de imágenes parecían operar solo en imágenes completas ... ¿Puedes señalar las llamadas de API que uno usa para hacer E/S incrementales con el biblioteca openjpeg ...? ¡Gracias! – snogglethorpe