Chismes del Lince 96 · Hexadecimal y compresión

Cómo se escribe un color, cómo se ahorra espacio en un texto, una imagen o un vídeo, y qué se pierde por el camino.

Los Macrothele han empezado a mandar fotos de la sierra al Lince desde sus robots de suelo. Pero la radio de largo alcance tiene poco ancho de banda: cada foto tarda una eternidad en llegar. La Gata Montesa mira la pantalla y dice: «No hace falta enviar menos cosas. Hay que escribirlas de otra manera».

1. Introducción

Un ordenador guarda todo en bits, ceros y unos. En el piano binario (chisme 48) ya vimos cómo un número se escribe con ceros y unos. Hoy damos un paso más: cómo se escribe un color y cómo se puede escribir la misma información ocupando menos.

Vamos a repasar cuatro cosas: el sistema hexadecimal, la compresión de texto, la compresión de imágenes y, por último, cómo se comprime un vídeo.

2. Hexadecimal: los colores

Un color en la pantalla se forma con tres cantidades: rojo, verde y azul. Cada una va de 0 a 255, porque con 8 bits se pueden escribir 256 valores. En binario sería muy largo: 11111111 00000000 00000000 es rojo puro.

El sistema hexadecimal usa 16 símbolos (0-9 y A-F) y cada símbolo ocupa 4 bits. Así, dos símbolos hexadecimales bastan para un canal de color: FF es 255, y 00 es 0. El color completo se escribe como #RRGGBB.

Prueba: escribe un color en el selector y mira cómo se descompone en sus tres canales.

Código: #1c7ed6

CanalHexadecimalDecimalBinario (8 bits)
Rojo
Verde
Azul

Un color ocupa 3 bytes (24 bits). Cada byte son 8 bits, o dos símbolos hexadecimales.

¿Por qué hexadecimal y no decimal?

Porque 16 es potencia de 2: cada símbolo hexadecimal equivale exactamente a 4 bits, y dos símbolos a un byte. En decimal, un byte no se corresponde con un número de dígitos fijo (255 tiene tres dígitos, pero 1 tiene uno).

3. Compresión de texto

Comprimir es escribir la misma información con menos bits. Hay dos ideas muy sencillas y muy usadas.

3.1. Por repetición (RLE)

Si un texto repite la misma letra muchas veces, basta con decir cuántas veces y cuál es: AAAAABBBC se convierte en 5A3B1C. Cada letra del texto original ocupa 8 bits; el resultado usa un número y una letra por cada grupo.

Ojo: este método solo funciona con letras, sin números en el texto, para que no se confundan con los recuentos.

Original0 bits
Comprimido0 bits
Ahorro—

3.2. Por diccionario

Si un texto repite palabras enteras, podemos guardar cada palabra repetida una sola vez en un diccionario y sustituirla en el texto por un número. Así <1> significa la palabra 1 del diccionario. El diccionario también ocupa espacio: hay que contarlo.

Original0 bits
Texto comprimido0 bits
Diccionario0 bits
Total—

¿Cuánto cuesta el diccionario?

Cada palabra del diccionario ocupa sus letras (8 bits cada una) más un separador. Con un texto corto, el diccionario puede costar más de lo que ahorra. Con un texto largo, en cambio, cada repetición ahorra mucho. Prueba con un texto de 2 o 3 líneas y compara.

4. Compresión de imágenes

Una imagen es una cuadrícula de píxeles, y cada píxel es un color. Sin comprimir, un píxel ocupa 24 bits. Pero en una imagen real hay muchos píxeles seguidos del mismo color: el cielo, el mar, el suelo. Podemos aplicar la misma idea de la repetición, pero fila a fila.

Pinta tu propia imagen de 16 × 16 o carga el ejemplo del sol y la sierra. Después comprime y compara.

Color: Reducir colores a:

Imagen original

Con menos colores

Sin comprimir—
Repeticiones por filas—
Con menos colores—
Diferencia media (con menos colores)—

Cada tramo de repetición se guarda como «cuántos píxeles» (8 bits) más «qué color» (24 bits): 32 bits por tramo. Si la imagen tiene pocos tramos, la compresión gana. Si cada píxel es distinto, puede que incluso ocupe más.

¿Qué pasa con «menos colores»?

Redondeamos cada canal a menos niveles (por ejemplo, de 256 a 4 niveles por canal). Así hay menos colores distintos y las repeticiones se alargan, pero el color cambia un poco. Esto es compresión con pérdida: no se puede recuperar el original. Es lo que hace el formato JPEG, aunque de forma mucho más sofisticada.

5. Compresión de vídeo

Un vídeo es una secuencia de fotogramas, y cada fotograma es una imagen. Si guardáramos cada fotograma completo, un vídeo de un minuto ocuparía muchísimo. Pero entre dos fotogramas seguidos casi nada cambia.

La idea es guardar un fotograma completo de vez en cuando (el fotograma clave) y, entre medias, solo las diferencias: qué píxeles cambian y a qué color. Cada diferencia cuesta un número de posición (6 bits en esta cuadrícula de 8 × 8) y un color (24 bits).

En este ejemplo, un punto rojo se mueve por una cuadrícula de 8 × 8. Ningún vídeo real aparece aquí: son fotogramas simulados.

Fotograma 0

Todos completos—
Con diferencias—
Ahorro—

6. Qué estamos midiendo realmente

7. Para el aula

8. Retos

  1. Haz que funcione. Comprime una frase con RLE y descomprímela. ¿Vuelve a ser igual?
  2. Modifica algo. Añade otra palabra al diccionario y mira si el ahorro total mejora.
  3. Añade un color. Dibuja una imagen con un color más y comprueba cuánto cambia el número de tramos.
  4. Mide el error. ¿Cuántos colores hay que mantener para que la diferencia media sea menor del 5 %?
  5. Diseña un vídeo. Haz que el punto siga una trayectoria diagonal. ¿El ahorro cambia?

Qué hemos aprendido

El hexadecimal es una forma compacta de escribir bits, y cada color son tres bytes. Podemos ahorrar espacio si el contenido se repite: en el texto, en las imágenes o entre fotogramas. Pero la compresión tiene un precio: en unos casos el original se recupera exactamente, y en otros se pierde algo para siempre.

Los Macrothele ya pueden enviar sus fotos por radio. Ahora toca decidir cuánta calidad estamos dispuestos a perder para que lleguen antes.

Prototipo educativo: los métodos de este chisme son sencillos. Los formatos reales (ZIP, PNG, JPEG, MP4) usan técnicas más avanzadas.