GARANTIR DESCONTO

Fórum Padronizar Imagem #268329

13/02/2005

0

Colegas minha dúvida é a seguinte tenho uma aplicação que usando o image pega um arquivo jpg cria uma referencia para o cliente e salva em uma pasta deixando o bd mais leve, até ai beleza só que eu queria que quando a foto fosse salva na pasta ficassem todas com o mesmo tamanho, pois tem fotos em 80 x 80, 640 x 480, 3 x 4.
Então como é que na hora de salvar eu padronizo o tamanho das fotos para que fiquem com 80 x 80, por exemplo.


Mssilva

Mssilva

Responder

Posts

13/02/2005

Beppe

function PadronizaTamanho(Imagem: TGraphic; W, H: Integer): TGraphic;
var
  B: TBitmap;
begin
  B := TBitmap.Create;
  try
    B.Width := W;
    B.Height := H;
    B.Canvas.StrecthDraw(Rect(0, 0, W, H), Imagem);
    Result := Imagem.ClassType.Create;
    Result.Assign(B);
  finally
    B.Free;
  end;  
end;


Chame assim:
Nova := PadronizaTamanho(SuaImagem, 80, 80);
try
  Nova.SaveToFile(´nome_do_arquivo.ext´);
finally
  Nova.Free;
end;


A função deve criar uma nova imagem do mesmo tipo da imagem passada como argumento.

Eu não testei o código, então por favor me retorne, se deu certo ou não.

T+


Responder

Gostei + 0

13/02/2005

Mssilva

Colega está dando erro nessa lina:
B.Canvas.StrecthDraw(Rect(0, 0, W, H), Imagem);
Erro:
[Error] UnitCadCds.pas(214): Undeclared identifier: ´StrecthDraw´
[Error] UnitCadCds.pas(215): Incompatible types: ´TGraphic´ and ´TObject´

Estou fazendo assim para garregar a imagem jpg ou bitmap:

procedure TFrmCadCds.btnCarregarClick(Sender: TObject);
begin
If dscds.State in [dsInsert, dsEdit] then
begin
OpenPictureDialog1.Execute;
Caminho:=OpenPictureDialog1.FileName;
if OpenPictureDialog1.FileName ´´ Then //Begin
//Label2.Caption:= ´Origem da Foto = ´+ caminho;
imgFoto.Picture.LoadFromFile(Caminho);
btnCarregar.Enabled:= False;
btnSalvar.Enabled:= True;
//end;
end
else
ShowMessage(´Para adcionar uma foto você deve criar uma nova banda!´);
end;

Para Gravar a imagem na pasta:

procedure TFrmCadCds.btnSalvarClick(Sender: TObject);
begin
if DirectoryExists(´C:\Cadastro de CDS\Bin\Fotos´) then
begin
imgFoto.Picture.SaveToFile(´C:\Cadastro de CDS\Bin\Fotos\´+edtCodigo.Text+´.jpg´);
ShowMessage(´Foto Salva com Sucesso´);
imgFoto.Picture:= Nil;
btnSalvar.Enabled:= false;
btnCarregar.Enabled:= true;
end
else
begin
ShowMessage(´Caro usuário não foi possível encontrar´+#13+
´A pasta onde ira ficar as fotos´);
ImgFoto.Picture:= Nil;
btnSalvar.Enabled:= false;
btnCarregar.Enabled:= true;
end;
end;

A imagem é gravada com o código da banda para pader visualizar em outro form

Como encaxo essa função que me envio
Des de já muito obrigado :D


Responder

Gostei + 0

13/02/2005

Beppe

Ops...mispelling... :oops:

function PadronizaTamanho(Imagem: TGraphic; W, H: Integer): TGraphic; 
var 
  B: TBitmap; 
begin 
  B := TBitmap.Create; 
  try 
    B.Width := W; 
    B.Height := H; 
    B.Canvas.StretchDraw(Rect(0, 0, W, H), Imagem); 
    Result := Imagem.ClassType.Create; 
    Result.Assign(B); 
  finally 
    B.Free; 
  end;  
end;


Veja agora. ;)


Responder

Gostei + 0

13/02/2005

Mssilva

Colega a função com o (ClassType) não funciona se tira funciona falta algo na uses?
Fiz assim:
procedure TFrmCadCds.btnSalvarClick(Sender: TObject);
Var
Nova : TGraphic;
begin
if DirectoryExists(´C:\Cadastro de CDS\Bin\Fotos´) then
begin
Nova:= PadronizaTamanho(imgFoto.Picture.Bitmap,80,80);
imgFoto.Picture.SaveToFile(´C:\Cadastro de CDS\Bin\Fotos\´+edtCodigo.Text+´.jpg´);
ShowMessage(´Foto Salva com Sucesso´);
imgFoto.Picture:= Nil;
btnSalvar.Enabled:= false;
btnCarregar.Enabled:= true;
end
else
begin
ShowMessage(´Caro usuário não foi possível encontrar´+#13+
´A pasta onde ira ficar as fotos´);
ImgFoto.Picture:= Nil;
btnSalvar.Enabled:= false;
btnCarregar.Enabled:= true;
end;
end;
Só que é criado um aquivo jpg em branco onde estou errando :oops:


Responder

Gostei + 0

13/02/2005

Beppe

Pode testar que agora tá limpo(eu testei). :D

function PadronizaTamanho(Imagem: TGraphic; W, H: Integer; Tipo: TGraphicClass = nil): TGraphic;
var
  B: TBitmap;
begin
  B := TBitmap.Create;
  try
    B.Width := W;
    B.Height := H;
    B.Canvas.StretchDraw(Rect(0, 0, W, H), Imagem);
    if Tipo = nil then
      Result := TGraphic(Imagem.ClassType.Create)
    else
      Result := Tipo.Create;
    Result.Assign(B);
  finally
    B.Free;
  end;
end;


Exemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
var
  Nova: TGraphic;
begin
  Nova := PadronizaTamanho(Image1.Picture.Graphic, 80, 80, TJPEGImage);
  try
    Image2.Picture.Graphic := Nova;
  finally
    Nova.Free;
  end;
end;


Eu mudei a lógica da rotina, com um parâmetro a mais. Eu vi que vc usa a propriedade Bitmap, o que significa que a imagem de origem não é um BMP. Se a imagem é JPEG, usar Bitmap apaga a imagem original :!:

O último parâmetro é o tipo da imagem que deseja criar. Se deixar nil ou não colocar nada, será criada uma imagem do mesmo tipo da original.

É necessário ter Jpeg e Graphics na uses.


Responder

Gostei + 0

13/02/2005

Mssilva

Beppe Funcionouuuuuu :lol: :D 8) , Valeu mesmo pela ajuda espero poder retribuir um dia.
Marcos


Responder

Gostei + 0

13/02/2005

Beppe

Que bom.

Quero apenas retificar uma coisa. Eu disse:

´Eu vi que vc usa a propriedade Bitmap, o que significa que a imagem de origem não é um BMP.´

mas queria dizer:

´Eu vi que vc usa a propriedade Bitmap, o que significa que a imagem de origem É um BMP.´

T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar