PDA

Ver la Versión Completa : no me ha visualiza las imagenes


kapullok_2006
01-06-2007, 13:16:23
hola tengo lo siguiente:

//------------------------------------------------------------------------------
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
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:

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:


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!