¿Por qué mi mapa de bits de 1 bit y 8x8 guarda más de 8 bytes en Photoshop?

Quiero que mi 8x8 salga como binario sin procesar; debe ser de 8 bytes, o 64 bits. Sin embargo, sale mucho más grande que eso; guardar como PNG me dio 154 bytes; guardar como BMP me dio 64 bytes (8 veces más grande de lo que debería ser).

Cuando creé una nueva imagen, Photoshop me dijo que sería de 8 bytes, claramente este no es el caso después de guardar.

Lo más bajo que pude obtener fue de 12 bytes, usando guardar para web y guardando como wbmp, pero quiero que sea de 8 bytes. Tiene que ser datos binarios sin procesar. ¿Cómo puedo solucionar este problema?

EDITAR: Y para el caso, otras cantidades bajas de bits salen más altas de lo esperado. ¿Por qué una imagen de 80x16 de 4 bpp aparece como 714 bytes en lugar de 640?

Bueno, los formatos de imagen ahorran más que solo datos de imagen sin procesar
Eso es lo que estoy tratando de lograr; datos de imagen sin procesar.
Dado que Photoshop necesita guardar el encabezado del archivo que le dice a los programas cuál es su tipo de archivo y cómo debe leerlo. No puedo simplemente guardar una imagen como sin procesar ya que ningún programa podría abrirla. ¿Puedo pedir lo que quiere los datos de imagen en bruto?
Estoy creando un juego y tratando de hacerlo lo más pequeño físicamente posible; una forma de hacerlo es almacenar índices de colores sin procesar en lugar de "colores reales". que en este caso es de 1 bit, solo 0 y 1.
¿Tiene la opción "Guardar como Raw" en su lista de guardar como? Prácticamente hace lo que dice.

Respuestas (1)

Los formatos de archivo contienen muchas cosas. Si bien es cierto que su mapa de bits puede tener 8 bytes, pero el contenedor en el que está almacenado no lo es.

Por ejemplo, una estructura de archivo PNG necesita todo tipo de datos adicionales, como una huella digital, información de la estructura del archivo, esquema de compresión y metadatos. Aunque gran parte de esto se puede eliminar, Photoshop no es de ninguna manera óptimo, el archivo seguirá siendo mucho más grande que 8 bytes.

El mundo real analógico sería un balde. Si bien el balde es bastante liviano, digamos 300 g, su peso proporcional es bastante pequeño si llena el balde con 10 litros de agua (3%) o arena (2% pierde grava). Sin embargo, el peso relativo del contenedor es bastante significativo si se quiere transportar un centilitro de agua (3000%).

Todos los contenedores tienen una sobrecarga. Por ejemplo, el tamaño de la matriz debe indicarse en alguna parte y eso solo se come, como los datos de su imagen. En esta nota, también vale la pena señalar que, debido a la forma en que funcionan las unidades, cada archivo utilizará una cantidad fija de espacio, por ejemplo, desde 512 bytes hasta varios kilobytes, por lo que tener archivos separados ultra pequeños no tiene sentido.

¿Entonces lo que hay que hacer?

  • Codifique todos los datos de su imagen en un solo archivo de imagen, llamado atlas de imágenes.
  • Escribe los datos de tu imagen en tu código fuente. Todavía será más grande que 8 bytes debido a la necesidad de almacenar la longitud de la matriz. Sin embargo, esto puede ser poco práctico.
  • Escribe tu propio formato, pero aún llegas al problema del contenedor. Nuevamente, es mejor poner múltiples fuentes de datos en un archivo de almacenamiento.
re 2: no necesariamente; Las matrices de lenguaje C no almacenan la longitud de la matriz en ninguna parte. y, por cierto, puede generar automáticamente dicho código fuente C en Gimp; use el formato de archivo "XBM": #define bitmap_width 8 #define bitmap_height 8 static unsigned char bitmap_bits[] = { 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00 };
@szulat sí, pero la persona que ensambla la imagen en una matriz de elementos necesita saber cuál es la altura y el ancho para usar esa matriz de manera significativa o para evitar el desbordamiento. En todo caso hay que anotar de alguna forma que es una foto de 8 x 8. Incluso si está codificado en el lector, todavía usa 2 bytes de datos o tal vez esto se puede codificar en un byte, pero aún usa algo de espacio en alguna parte.
@szulat su demostración de XMB muestra exactamente lo que estoy diciendo: almacena dos valores de ancho y alto en la fuente para un total de 10 bytes de uso de memoria para una enorme sobrecarga del contenedor del 25 %.
claro, pero por otro lado, si usa el mismo algoritmo codificado para procesar un millón de mapas de bits de 8x8, ya guardó 2x2x1000000-2x2 bytes :-]
#define usa exactamente 0 bytes de código compilado
@szulat Claro, pero luego estás haciendo un atlas de imágenes que funciona incluso sin codificar cosas de forma permanente a medida que cae la sobrecarga.
El tamaño/formato, etc. de la imagen no es un requisito absoluto para ser almacenado en la imagen hasta donde yo sé, siempre que tenga esos datos en alguna parte , tal vez tendría más sentido si digo que no lo estoy. tratando de almacenar un "archivo de imagen" aquí, pero ¿solo los datos de la imagen?
@Omega escriba un script que extraiga los datos sin procesar de un archivo PNG. De esta manera, incluso si usa cualquier software, puede eliminar rápidamente la información