👨‍💻
Coding Library
  • 👨‍💻Coding Library
  • 👾Linux
    • Basic Commands
    • Other commands
      • Ls
      • Mv
      • Chmod
      • Ln
      • Cat
      • Wc
      • Grep
      • Sed
      • Find
    • Sistema de ficheros
      • Inodos
  • 📦Git
    • Page 3
  • 🖊️Vim
    • Vim Basics
      • Gramatica de Vim
      • Moviendote por un archivo
    • Todo y mas
  • 🏛️C
    • Estructuras de datos
      • Listas Enlazadas
      • Colas
      • Pilas
      • Arboles
    • Valgrind
    • Operadores de bits
    • Procesos e Hilos
      • Fork
      • Wait
      • Waitpid
      • Semáforos
      • Estructura sigaction
      • Signals
    • MiniLibX
      • Ventanas (windows)
      • Imprimir Pixels
      • Imagenes
      • Colores
      • Eventos
      • Loops (bucles)
      • Leer imagenes
    • Readline
    • Funciones
      • opendir
      • access
    • Network Programming
      • Structs
      • Llamadas al sistema
      • Synchronous I/O Multiplexing
        • kqueue
  • 🌃C++
    • Clases
      • Herencia
      • Shallow and deeps copies
      • Clases abstractas y Interfaces
      • Reasignar operadores
    • Punteros y referencias
    • Manejo de ficheros
    • Punteros a funciones
    • Excepciones
    • Casting
    • Templates
    • Templated Containers
      • Iterators
      • std::vector
      • std::list
      • std::map
  • 🧠Pyhton
    • Sintaxis basica
    • Scripts
    • Tipos de datos
      • Listas
      • Set
      • Diccionarios
      • Generadores
    • Estructuras de control
      • Iterar con For
      • Iterar con zip
      • Iterar con enumerate
    • Map, Filter and Reduce
    • Funciones
    • Clases
      • Metodos
      • Herencia
    • Formateo con {} y format()
    • Decoradores
  • 📦JAVA
    • Conceptos basicos
    • Programacion estructurada
    • Clases predefinidas
    • POO
      • Clases
      • Herencia
      • Polimorfismo
      • Abstraccion
      • Encapsulacion
    • ArrayList
    • Excepciones
  • ⚒️HTML
    • HTML Basics
    • Elementos de bloque
      • Titulos y parrafos
      • Header, Main y Footer
      • Section, article y aside
    • Elementos en línea
    • Atributos
    • Enlaces <a>
    • Listas
    • Tablas
    • Formularios
      • Input
      • Select y datalist
      • GET y POST
    • Contenido embebido
      • Imagenes
      • Audio y video
      • Iframe
  • 🎨CSS
    • Introduccion
    • Selectores
    • Como funciona CSS
    • Box Model
    • Desbordamiento y Colapso de margenes
    • Display
    • Position
    • Medidas absolutas y relativas
  • 🟡JavaScript
    • Promesas
    • Async/Await
  • 📲Svelte
    • Componentes
    • Reactividad
    • Directivas
    • Eventos
  • 🖥️Sistemas
    • Particiones
  • 🕸️Redes
    • IP Adress
    • Subnet Mask
  • 🕷️Web Scrapping
    • Scrapy
      • Spiders
        • CrawlerSpider
      • Process data
      • Save data
        • CSV y JSON
        • SQLite
    • Splash
    • Selenium
Powered by GitBook
On this page
  • El estándar de los enteros de color
  • BitShifting
  1. C
  2. MiniLibX

Colores

Los colores se presentan en formato int. Por lo tanto, es necesario hacer algunas cosas complicadas para obtener un int que pueda contener los valores ARGB.

El estándar de los enteros de color

Cambiamos los bits para utilizar el formato TRGB. Para definir un color, lo inicializamos asi 0xTTRRGGBB, Donde cada carácter representa lo siguiente:

Letra
Descripcion
Ejemplo

T

Transparencia

R

Componente rojo

0x00FF0000

G

Componente Verde

0x0000FF00

B

Componente Azul

0x000000FF

Podemos utilizar dos métodos para codificar y decodificar los colores:

  • BitShifting

  • char/int conversion

BitShifting

Dado que cada byte contiene 2^8 = 256 valores (1 byte = 8 bits), y que los valores RGB van de 0 a 255, nos cabe perfectamente un entero (ya que un int son 4 bytes). Para establecer los valores de forma programada utilizamos el desplazamiento de bits. Es decir que un int nos entra perfectamente la combinacion de estos 4 bytes que representan un color.

Para ello utilizaremos la siguiente funcion que nos junta los 4 parametros en un solo integrer, es decir una funcion que nos haga la combinacion de colores:

int	create_trgb(int t, int r, int g, int b)
{	
    return (t << 24 | r << 16 | g << 8 | b);
}
  • EL byte de trasparencia (T) esta al final del todo, por lo que habra que desplazarlo 24 posiciones hacia la izquierda

  • El byte del rojo (R) habra que despalzarlo 16 bites

  • El byte del Verde (G) habra que despalzarlo 8 bites

  • El byte del azul (B) al ser el ultimo byte, no es necesario depalzarlo

Como puedes ver los desplaamos en 8 en 8, que son los bites que ocupan un byte.

En el caso de que queramos separa la union de estos colores en los 4 parametros (TRGB) habra que utilizar las siguientes funciones:

int	get_t(int trgb)
{
	return ((trgb >> 24) & 0xFF);
}

int	get_r(int trgb)
{
	return ((trgb >> 16) & 0xFF);
}

int	get_g(int trgb)
{
	return ((trgb >> 8) & 0xFF);
}

int	get_b(int trgb)
{
	return (trgb & 0xFF);
}

Estas funciones lo que hacen es comparar el byte correspondiente de cada color con una mascara de zero (0xFF) y de esta manera eliminar los valores sobrantes a nuestro color.

Para que quede mas claro este concepto lo esta explicado en el siguiente vido:

PreviousImagenesNextEventos

Last updated 2 years ago

Esta fucnion lo que hace es superponer los 4 int en uno solo, creando una combinacion de sus bites, mediante el . Sin emabrgo antes de ralizar la comparacion para la superposicon de los bits, tenemos que desplazarlos a sus posicones correspondiente para asi a la hora de juntarlos no se superponga uno encima del otro

🏛️
operador de bites ( | )