Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2006
juanchi juanchi is offline
Miembro
 
Registrado: sep 2003
Posts: 56
Poder: 23
juanchi Va por buen camino
Hola.
Ahora tengo otro problema. Lo que pasa es que al recorrer una imagen me da que esta tiene pixeles blancos aunque la imagen original no tenga ninguno. Lo que hice fué pasar la imagen en RGB a 256 colores con la sentencia: imagen1.canvas.pixel[x,y] and $FF.

Salu2.
Responder Con Cita
  #2  
Antiguo 31-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por juanchi
Hola.
Ahora tengo otro problema. Lo que pasa es que al recorrer una imagen me da que esta tiene pixeles blancos aunque la imagen original no tenga ninguno. Lo que hice fué pasar la imagen en RGB a 256 colores con la sentencia: imagen1.canvas.pixel[x,y] and $FF.

Salu2.
¿Puedes poner un poco de codigo?
Responder Con Cita
  #3  
Antiguo 31-10-2006
juanchi juanchi is offline
Miembro
 
Registrado: sep 2003
Posts: 56
Poder: 23
juanchi Va por buen camino
El código!!!. Ahí va...

procedure TForm1.BitBtn1Click(Sender: TObject);
var
X, Y, Z, W, MaxValor,TamLinea: Integer;
Color : LongInt;
Histograma : array[0..255] of Integer;
begin


MaxValor := 0;
for Z:=0 to 255 do
begin
Histograma[Z] := 0;
end;

for Y := (image1.Width - image1.Width) to image1.Width do
begin
for X := (image1.Height - image1.Height) to image1.Height do
begin
Color := image1.Canvas.Pixels[X, Y]and $FF; {De RGB a 256 colores}
Histograma[Color] := Histograma[Color]+1;
end;
end;

for Z:=0 to 255 do
begin
if( Histograma[Z] > MaxValor ) then
MaxValor := Histograma[Z];
end;

for Z:=0 to 255 do
begin
TamLinea := ((Histograma[Z] * 312) div MaxValor);
image2.Canvas.MoveTo(18+Z, 326);
image2.Canvas.LineTo(18+Z, 326-TamLinea);
end;


end;


Salu2
Responder Con Cita
  #4  
Antiguo 31-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Bien, en tu código el problema es el siguiente (marcado en rojo), al hacer referencia a un pixel que no existe devuelve el color blanco por defecto, por eso te aparecía el color blanco aun cuando la imagen no lo contenía:

Código Delphi [-]
for Y := (image1.Width - image1.Width) to image1.Width -1 do
begin
  for X := (image1.Height - image1.Height) to image1.Height -1 do
  begin

Por otro lado, retoque un poco el código:
Código Delphi [-]
var
  i,j: integer;
  Histograma: array[0..255] of Integer;
  Max: Integer;
begin
  FillChar(Histograma,Sizeof(Histograma),0);
  for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
    for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
      inc(Histograma[Image1.Canvas.Pixels[i,j] and $FF]);

  Max:= 0;
  for i:= 1 to 255 do
    if Histograma[i] > Histograma[Max] then
      Max:= i;

  j:= Image1.Picture.Bitmap.Width * Image1.Picture.Bitmap.Height;
  Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
  for i:= 0 to 255 do
  begin
    Image2.Canvas.MoveTo(i,0);
    Image2.Canvas.LineTo(i,(Image2.Height * Histograma[i]) div Histograma[Max]);
  end;
end;

Pero esto ultimo ya es cuestión de gustos. De todas formas para este tipo de operaciones usar la propiedad Pixels del canvas es poco eficiente. Echale un vistazo a la propiedad Scanline del bitmap, mucho mas apropiada para estos casos.

PD: Usa la etiquetas [delphi][/delphi] para incluir código, de esta manera se podrá leer mucho mejor.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como hago un pixel transparente jorge1987 Gráficos 7 26-09-2006 20:19:28
pasar imagen pixel a pixel gulder Gráficos 7 26-06-2005 02:10:45
Como asignarle atributos a un pixel? bustio .NET 0 03-12-2004 20:42:00
Obtener posicion X,Y de un pixel en un TImage diegofhernando Varios 3 17-12-2003 15:03:23
¿ Cual es la mejor forma de implementar una Pizarra con Sockets? pixel a pixel ? sase Internet 1 22-10-2003 16:23:50


La franja horaria es GMT +2. Ahora son las 19:57:58.


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