Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Qué se almacena exactamente con un Scanline?? (https://www.clubdelphi.com/foros/showthread.php?t=52968)

NeoAnderson 06-02-2008 07:07:02

Qué se almacena exactamente con un Scanline??
 
Hola nuevamente, bueno, pues estuve buscando por la red informacion sobre el ScanLine y aprendí a utilizarlo para manipular mas rapidamente una imagen, sin embargo no pude encontrar qué es exactamente lo que hace esta instruccion. Lo digo por lo siguiente: Yo tenía la idea de que con un Scanline, se almacenaban en un arreglo los canales rgb de manera consecutiva, por ejemplo, si tenía una imagen de 2x1 pixeles, con scanline tendría un arreglo resultante de la forma [r,g,b,r,g,b], pero me di cuenta de que esta idea funciona solo si tengo bmp de 24 bits, entonces, como puedo saber donde está el canal r, g y b en un bmp de digamos 8 o 32 bits usando Scanline? Espero no estar repitiendo este hilo, pero busqué en los foros y no encontré algo que me pudiera resolver esta duda.

Gracias de antemano.

cHackAll 06-02-2008 21:27:12

Bueno... en primer lugar un ScanLine es una matriz (como ya lo expusiste); de la BMP interna asociada al lienzo (Canvas); como tambien te has percatado la forma de interpretar los datos de dicha matriz dependen del PixelFormat que es utilizado al momento de crear el Bitmap interno.

solo con 24 y 32 bits puedes objener el RGB tal yu como es; cuando es 32 es un DWORD (RGB?) donde "?" es un byte que no debemos tomar muy en cuenta por ahora, cuando es de 24 bits puedes obtener el RGB directamente.

El caso se complica cuando se utiliza 16 bits, en el cual solo hay 65536 colores, cosa que difiere de los 16777216 que el RGB te permite; entonces debes tomar la informacion como WORD.

Cuando son 8 bits hay 256 posibles colores para ello debes utilizar un BYTE para leer la informacion del color y dichos colores difieren al RGB en su totalidad.

Y para un BIT, pues un blanco y negro debes comprender que un byte tiene 8 pixeles de informacion.

Saludos

NeoAnderson 07-02-2008 00:32:56

Gracias por tu respuesta cHackAll, me ayudo a entender mejor la situacion, sin embargo aun tengo el problema de obtener un rgb de una imagen de 8 o 16 bits. Quisiera poder abrir un bmp sin importar su profundidad en bits y transformarlo a 24 bits para manipularlo como rgb, yo creo que si se puede, pero no se aun cómo hacerlo. Espero puedan ayudarme, y gracias nuevamente.

cHackAll 07-02-2008 00:39:00

Cita:

Empezado por NeoAnderson (Mensaje 263910)
Gracias por tu respuesta cHackAll, me ayudo a entender mejor la situacion, sin embargo aun tengo el problema de obtener un rgb de una imagen de 8 o 16 bits. Quisiera poder abrir un bmp sin importar su profundidad en bits y transformarlo a 24 bits para manipularlo como rgb, yo creo que si se puede, pero no se aun cómo hacerlo. Espero puedan ayudarme, y gracias nuevamente.

Ok; nbo veo mayor problema... tienes dos imagenes, ambas representan un Bitmap o un Canvas en todo caso... lo unico que debes hacer es una copia; puedes usar la API BitBlt; CopyRect o el método CopyRect propio de la clase TCanvas.

Copias de una imagen de 8 bits a una de 24 bits y viceversa (luego de hacer la edicion claro esta)

Saludos

NeoAnderson 07-02-2008 00:50:25

Problema Solucionado!
 
Gracias nuevamente por tu pronta respuesta chackAll, efectivamente funciona la solucion que me diste, y tambien quiero agregar que otra forma de solucionarlo que me funcionó fue lo siguiente.

Código Delphi [-]
var Bitmap:TBitmap;
begin
     Bitmap:=TBitmap.Create;
     Bitmap:=LoadFromFile(ruta);
     Bitmap.PixelFormat:=pf24bit;
     //...y despues todas las manipulaciones rgb que quiera
end;
Con esto puedo cargar cualquier mapa de bits de cualquier profundidad y puedo trabajarlo con formato de 24 bits. :rolleyes:


La franja horaria es GMT +2. Ahora son las 01:12:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi