Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-03-2008
andarcio andarcio is offline
Miembro
 
Registrado: abr 2007
Posts: 18
Poder: 0
andarcio Va por buen camino
Escala de grises

alguien sabe como puedo poner un bitmap en una configuracion de escala de grises. Explico:

estoy cargando y mostrando imagenes (muchas..) de forma rapida.estas estan en formato .tiff (en escala de grises - 8 bit por color), asi que lo que estoy haciendo es moviendolas con (move) de una direccion en memoria a un bitmap con la propiedad "bitmap.PixelFormat:= pf8bit". y todo bien excepto por la escala..., que ya no es gris.

si alguien me pudiera dar alguna idea

gracias
Responder Con Cita
  #2  
Antiguo 01-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
En un bitmap, pf8bit se refiere a colores de 8 bits, es decir, 256 colores. Creo que lo que tendrías que hacer es esto (porque me parece que Bitmap no soporta escala de grises).

Cada punto del TIFF tiene un valor de 0 a 255, para indicar la tonalidad de gris. Pues bien, el equivalente en Bitmap sería color de 24bits, donde tanto rojo, como verde, como azul tendrán el mismo valor del TIFF (en cada punto). Mejor explicado, si un pixel del TIFF tiene valor 80, pues entonces el pixel equivalente en Bitmap sería R=80,G=80,B=80.


Salu2.
Responder Con Cita
  #3  
Antiguo 01-03-2008
andarcio andarcio is offline
Miembro
 
Registrado: abr 2007
Posts: 18
Poder: 0
andarcio Va por buen camino
ok
Pero como dije antes utilizo el procedimiento "move" y "Scanline" para obtener velocidad, si hago lo que me sugieres entonces tendria que preparar cada vector fila de las imagenes que manipulo. esto me tomaria bastante tienpo y triplicaria el espacio en memoria,

agradezco la propuesta, y sobre todo agradeceria alguna otra.

gracias
Responder Con Cita
  #4  
Antiguo 01-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Me lo imaginaba... Bueno, una alternativa para ganar algo de velocidad sería implementarlo en ensamblador... si algún alma caritativa se presta a la labor...
Responder Con Cita
  #5  
Antiguo 01-03-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola andarcio,
¿Podrías darnos una muestra de código de como estás haciendolo?

Además podrías ser más específico cuando dices:

Cita:
estoy cargando y mostrando imagenes (muchas..) de forma rapida
Muy seguramente habrá una solución... pero para llegar a eso necesitamos concer con más detalles lo que estás haciendo.

Otra alternativa es que en vez de tener las imagenes en .tiff la tengas en el equivalente RGB como menciona ixMike. De módo que sólo bastaria con mostrarlas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 02-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
andarcio; como te comentó ixMike lo que intentas cambiando el PixelFormat a 8 no te dara resultado por lo ya expuesto. Como tambien comentaba ixMike, para hacer una escala de grises debes "igualar" cada color del RGB, algo como:
Código Delphi [-]
...
 Color := Pixel[y,x];
 Gray := (GetRValue(Color) + GetGValue(Color) + GetBValue(Color)) div 3;
 Pixel[y,x] := RGB(Gray, Gray, Gray);
...

Te dejo el Truco 433, independientemente de la conversión de formatos y el redimencionamiento es exactamente lo que necesitas.

Saludos
Responder Con Cita
  #7  
Antiguo 02-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Una duda, ¿cómo lees el archivo TIFF?
Responder Con Cita
  #8  
Antiguo 03-03-2008
andarcio andarcio is offline
Miembro
 
Registrado: abr 2007
Posts: 18
Poder: 0
andarcio Va por buen camino
Gradezco sus respuestas

aqui les mando algo de codigo que utilizo,

primero creo un tipo de datos

type tpimg=^timg;
timg =record
a:array[0..alto] of array[0..ancho] of byte;
end;


despues ago un arreglo de este type

pimg:array of tpimg;

inicializo (segun un Array de direciones dado en lisbox1.items)
//aqui es donde leo los .tiff
[i]setlength(pimg,ListBox1.items.count);
for i:=0 to ListBox1.items.count-1 do
begin
New(pimg[i]);
assignfile(f,ListBox1.items);
reset(f);
seek(f,2048); //
salto los comentarios del tiff
[i] for j:=0 to 423 do
blockread(f,pimg[i]^.a[j],sizeof(pimg^.a[j]));
end;

ahora los muestro el selecionado que es >0 y <listbox1.count
BitMap := TBitMap.create;
bitmap.PixelFormat:= pf8bit;
try
BitMap.Height:=alto;
bitmap.Width:=ancho;
for y:=0 to BitMap.Height -1 do
begin
P := BitMap.ScanLine[y];
move(pimg[seleccionado]^.a[y],p^,sizeof(pimg[seleccionado]^.a[y]));
end;
image1.Canvas.Draw(0,0,BitMap);
finally
BitMap.Free;
end;
nota1: no solo las muestro sino que trabajo con todo el conjunto de imagenes
ej.(promedio de estas).
nota2: la solucion momentanea que he dado, es crear memoria solo a la hora de mostrarlas, pero es considerablemente lento,

espero que les sirva y que me puedan ayudar

slds
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Poner aplicacion escala grises darkerbyte Gráficos 5 07-01-2008 10:17:16
escala de imagen robokop Gráficos 2 30-10-2006 11:53:02
Manejo de escala con el componente Timage. gustavoracho Gráficos 1 01-09-2005 16:30:17
Color de fondo y escala de un paintbox vipata Gráficos 2 28-12-2004 10:30:33
Como manipular los pixeles la matriz de valores en una imagen en escala de grises erocha Gráficos 4 30-11-2003 06:20:32


La franja horaria es GMT +2. Ahora son las 05:25:19.


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
Copyright 1996-2007 Club Delphi