Ver Mensaje Individual
  #2  
Antiguo 14-06-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
Cool Yo lo haría asi:

Me parece que lo que estas haciendo básicamente es un pequeño thumbnail en blanco y negro de un listado de archivos jpeg. Me parece que el problemilla se debe a que no refresca la imagen... no estoy seguro pues no quiero ver el componente, sin embargo puedo suponer que haciendo un "Refresh" al objeto ImageEfecto1 luego de ponerle a escala de grises podria funcionar, pero no hago más que divagar pues no probe tal componente.
Con el tiempo me di cuenta que no siempre es mejor usar componentes, así que te hice un pequeño código que te será muy util:

Código Delphi [-]
uses jpeg;

function jpgToGrayThumbnail(const FileName: string; Width: Integer): TBitmap;
var
 jpg: TJPEGImage;
 Color: PCardinal;
 Count, y, x, Gray: Cardinal;
begin
 jpg := TJPEGImage.Create;
 jpg.LoadFromFile(FileName);
 Result := TBitmap.Create;
 Result.Width := Width;
 with Result do
  begin
   Height := (Width * jpg.Height) div jpg.Width;
   PixelFormat := pf32Bit;
   Canvas.StretchDraw(Rect(0, 0, Width - 1, Height - 1), jpg);
   Count := Abs(Cardinal(ScanLine[1]) - Cardinal(ScanLine[0])) div 4;
   y := Height;
   repeat Dec(y);
    Color := ScanLine[y];
    x := Count;
    repeat Dec(x);
     Gray := (GetRValue(Color^) + GetGValue(Color^) + GetBValue(Color^)) div 3;
     Color^ := RGB(Gray, Gray, Gray);
     Inc(Color);
    until x = 0;
   until y = 0;
//   SaveToFile('cache.bmp'); // Opcional 
  end;
 jpg.Free;
end;

Podras apreciar que resulta mucho mas óptimo el código que te dejo... ahhh su modo de empleo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Picture.Assign(jpgToGrayThumbnail('e:\Mis imágenes\0002.jpg', 80));
end;

claro que lo puedes usar de N formas...
Espero no sea tarde y te sea util. Suerte!

Última edición por cHackAll fecha: 15-06-2007 a las 00:01:53.
Responder Con Cita