Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   no me ha visualiza las imagenes (https://www.clubdelphi.com/foros/showthread.php?t=44253)

kapullok_2006 01-06-2007 13:16:23

no me ha visualiza las imagenes
 
hola tengo lo siguiente:
Código Delphi [-]
//------------------------------------------------------------------------------
procedure JPGToBMP(f_jpg,f_bmp: string); forward;
procedure BMPToJPG(f_bmp,f_jpg:string); forward;
procedure CambiarTamanoBMP(f_entrada,f_salida: string; ancho: integer); forward;
//------------------------------------------------------------------------------
procedure JPGToBMP(f_jpg,f_bmp: string);
var jp: TJPEGImage;
    b:  TBitMap;
begin
     jp:= TJPEGImage.Create;
     b:= TBitMap.Create;
     jp.LoadFromFile(f_jpg);
     b.Assign(jp);
     b.SaveToFile(f_bmp);
     jp.Free;
     b.Free;
end;
//------------------------------------------------------------------------------
procedure BMPToJPG(f_bmp,f_jpg:string);
var b:TBitMap;
    jp:TJPEGImage;
begin
    b:=TBitMap.Create;
    jp:=TJPEGImage.Create;
    b.LoadFromFile(f_bmp);
    jp.Assign(b);
    jp.SaveToFile(f_jpg);
    b.Free;
    jp.Free;
end;
//------------------------------------------------------------------------------
procedure CambiarTamanoBMP(f_entrada,f_salida: string; ancho: integer);
var b_e,b_s: TBitMap;
    r: TRect;
begin
     b_e:= TBitMap.Create;
     b_s:= TBitMap.Create;
     b_e.LoadFromFile(f_entrada);
     b_s.PixelFormat:= pf24bit;
     b_s.Width:= ancho;
     b_s.Height:= (ancho*b_e.Height) div b_e.Width;
     r.Left:= 0; r.Right:= b_s.Width;
     r.Top:= 0; r.Bottom:= b_s.Height;
     b_s.Canvas.StretchDraw(r,b_e);
     b_e.Free;
     b_s.Free;
end;
//-----------------------------------------------------------------------
procedure TForm2.Blanco_NegroClick(Sender: TObject); //Botón
begin
   Screen.Cursor := crHourGlass;
   Form2.ImageZoom1.Visible:=false;
   Form2.Image1.Visible:=false;
   if Form1.Memo1.Lines.Strings[i+offset] = '*.jpg' then
   begin
   //JPGToBMP('*.jpg',Form1.Memo1.Lines.Strings[i+offset]);
   JPGToBMP('*.jpg','G:\carpeta2\*.bmp');
   CambiarTamanoBMP('G:\carpeta2\*.bmp','G:\carpeta3\*.bmp',20);
   lista_archivos.Strings[i+offset]:='G:\carpeta3\*.bmp';
   end;
   
//   Form2.ImageEfecto1.Picture.LoadFromFile(Form1.Memo1.Lines.Strings[i+offset]);
   Form2.ImageEfecto1.Picture.LoadFromFile(lista_archivos.Strings[i+offset]);
   Form2.ImageEfecto1.Effect_GrayScale;
   Screen.Cursor := crDefault;
end;
Mi aplicacion me muestra en un Memo, la ruta de las imagenes,pero cuando quiero aplicarle blanco_negro a la foto desaparece ésta del componente imagen como tiene que ser y no aprece cambiada en ImageEfecto1, que es un componente 'ProEffectImage',que me recomendaron en estos foros.
Saludos,perdonad si me quereis explicar algo.

cHackAll 14-06-2007 23:59:40

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!


La franja horaria es GMT +2. Ahora son las 02:52: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