Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Matriz de Pixeles. Necesito velocidad!! (https://www.clubdelphi.com/foros/showthread.php?t=17780)

elcaracas 20-01-2005 23:21:58

Matriz de Pixeles. Necesito velocidad!!
 
Hola. Mi problema es el siguiento.

Estoy haciendo un programa de tratamiento de archivos *.FIT. estos archivos guardan una matriz de números enteros de 16-bits (0 a 65535). Estos se dividen por 256 y la pasamos a 8-bits. En realidad es una foto en blanco y negro con 65536 niveles de grises y la paso a 256 niveles de grises. La represento pixel a pixel para visualizarla, del siguiente modo:

Supongamos que f[i,j] es la matriz que guarda la información de la foto.
la foto es de 512x512 pixeles:

el código es el siguiente:

for j:=0 to 511 do
for i:=0 to 511 do
begin
b:=round(f[i,j]/256); {b:byte}
Image1.canvas.pixel[i,j]:=rgb(b,b,b);
end;

pero esto va extremadamente lento.

Alguien sabe como puedo representar esta matriz mas rápido?

Muchas gracias!

Héctor Randolph 21-01-2005 00:31:18

Hola amigo!

Te recomiendo que leas este truco publicado en el foro que trata el tema de acceso rápido a los pixeles de una imagen:

¿Cómo se puede acceder de forma rápida a los píxeles de un TBitmap?

También te sería útil leer los hilos que se han abierto últimamente relacionados con este tema, por ejemplo:

http://www.clubdelphi.com/foros/showthread.php?t=17391


Un Saludo.

elcaracas 22-01-2005 15:09:11

Muchas Gracias hector.

He estado jugando con scanline y va muchisimo mas rápido. pero el inconveniente es que tengo que cargar un bmp primero, y ese bmp no lo tengo, ya que la imagen la obtengo de una matiz que saco de un fichero que no tiene el formato bmp,jpg,raw,u otro gráfico.

Tengo que cargar una imagen bmp, la que sea, de las dimensiones de mi fotografía, que a priori puede ser cualquiera, para modificarla y meter la matriz.

¿alguna Idea?.

Gracias!!

elcaracas 23-01-2005 11:42:21

Gracias.

Ya he hecho que funcione sin tener un bmp antes.

Un saludo

Joaquín

marcoszorrilla 23-01-2005 11:49:38

Sería conveniente que publicaras el código finalmente utilizado por si alguien más pudiera estar interesado en tu solución.

Un Saludo.

<Sergio> 23-01-2005 23:42:59

Cita:

Empezado por elcaracas
b:=round(f[i,j]/256); {b:byte}

¿Seguro que funciona bien para este caso?

b:=round(65535/256);

Prueba con desplazamientos que son más rápidos:

b:=(f[i,j] shr 8);

elcaracas 25-01-2005 21:59:05

Gracias Sergio.


La franja horaria es GMT +2. Ahora son las 22:31:10.

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