GARANTIR DESCONTO

Fórum Diminuir resolução da imagem #374045

25/08/2009

0

Pessoal, algum sabe fazer ou tem algum exemplo de como diminuir a resolução de uma imagem?

Por exemplo tenho um arquivo Logo.jpg ou .bmp q esta em 1024x768 e quero deixar ele em 800x600 e salvar um arquivo nessa resolução.

Eu tinha um exemplo assim em casa... e estou precisando fazer isso aqui no serviço e não to achando na net.

Obrigado.


Osocram

Osocram

Responder

Posts

25/08/2009

Osocram

Ok.. ja consegui o que precisava
Vou postar aqui os codigos que usei.

Como a função de alterar a resolução era p bmp e as vezes posso ter q usar JPG, fiz (copiei no google) 2 funções para conversão.



procedure Bmp2Jpeg(const BmpFileName, JpgFileName: string);
var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  Bmp := TBitmap.Create;
  Jpg := TJPEGImage.Create;
  try
    Bmp.LoadFromFile(BmpFileName);
    Jpg.Assign(Bmp);
    Jpg.SaveToFile(JpgFileName);
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;

procedure Jpeg2Bmp(const BmpFileName, JpgFileName: string);
var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  Bmp := TBitmap.Create;
  Jpg := TJPEGImage.Create;
  try
    Jpg.LoadFromFile(JpgFileName);
    Bmp.Assign(Jpg);
    Bmp.SaveToFile(BmpFileName);
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;

procedure QualityResizeBitmap(bmpOrig, bmpDest: TBitmap; newWidth, newHeight: Integer);
var
   xIni, xFin, yIni, yFin, xSalt, ySalt: Double;
   X, Y, pX, pY, tpX: Integer;
   R, G, B: Integer;
   pxColor: TColor;
begin
   bmpDest.Width  := newWidth;
   bmpDest.Height := newHeight;

   xSalt := bmpOrig.Width / newWidth;
   ySalt := bmpOrig.Height / newHeight;

   yFin := 0;
   for Y := 0 to pred(newHeight) do
   begin
      yIni := yFin;
      yFin := yIni + ySalt;
      if yFin >= bmpOrig.Height then
         yFin := pred(bmpOrig.Height);

      xFin := 0;
      for X := 0 to pred(newWidth) do
      begin
         xIni := xFin;
         xFin := xIni + xSalt;
         if xFin >= bmpOrig.Width then
            xFin := pred(bmpOrig.Width);

         R := 0;
         G := 0;
         B := 0;
         tpX := 0;

         for pY := Round(yIni) to Round(yFin) do
            for pX := Round(xIni) to Round(xFin) do
            begin
               Inc(tpX);
               pxColor := ColorToRGB(bmpOrig.Canvas.Pixels[pX, pY]);
               R := R + GetRValue(pxColor);
               G := G + GetGValue(pxColor);
               B := B + GetBValue(pxColor);
            end;

         bmpDest.Canvas.Pixels[X,Y] := RGB(Round(R/tpX),Round(G/tpX),Round(B/tpX));
      end;
   end;
end;


Se alguem precisar esta ae.
flw.


Responder

Gostei + 0

22/09/2015

Willian Amor

Ok.. ja consegui o que precisava
Vou postar aqui os codigos que usei.

Como a função de alterar a resolução era p bmp e as vezes posso ter q usar JPG, fiz (copiei no google) 2 funções para conversão.



[code:1:6e40917f84]procedure Bmp2Jpeg(const BmpFileName, JpgFileName: string);
var
Bmp: TBitmap;
Jpg: TJPEGImage;
begin
Bmp := TBitmap.Create;
Jpg := TJPEGImage.Create;
try
Bmp.LoadFromFile(BmpFileName);
Jpg.Assign(Bmp);
Jpg.SaveToFile(JpgFileName);
finally
Jpg.Free;
Bmp.Free;
end;
end;

procedure Jpeg2Bmp(const BmpFileName, JpgFileName: string);
var
Bmp: TBitmap;
Jpg: TJPEGImage;
begin
Bmp := TBitmap.Create;
Jpg := TJPEGImage.Create;
try
Jpg.LoadFromFile(JpgFileName);
Bmp.Assign(Jpg);
Bmp.SaveToFile(BmpFileName);
finally
Jpg.Free;
Bmp.Free;
end;
end;

procedure QualityResizeBitmap(bmpOrig, bmpDest: TBitmap; newWidth, newHeight: Integer);
var
xIni, xFin, yIni, yFin, xSalt, ySalt: Double;
X, Y, pX, pY, tpX: Integer;
R, G, B: Integer;
pxColor: TColor;
begin
bmpDest.Width := newWidth;
bmpDest.Height := newHeight;

xSalt := bmpOrig.Width / newWidth;
ySalt := bmpOrig.Height / newHeight;

yFin := 0;
for Y := 0 to pred(newHeight) do
begin
yIni := yFin;
yFin := yIni + ySalt;
if yFin >= bmpOrig.Height then
yFin := pred(bmpOrig.Height);

xFin := 0;
for X := 0 to pred(newWidth) do
begin
xIni := xFin;
xFin := xIni + xSalt;
if xFin >= bmpOrig.Width then
xFin := pred(bmpOrig.Width);

R := 0;
G := 0;
B := 0;
tpX := 0;

for pY := Round(yIni) to Round(yFin) do
for pX := Round(xIni) to Round(xFin) do
begin
Inc(tpX);
pxColor := ColorToRGB(bmpOrig.Canvas.Pixels[pX, pY&93;);
R := R + GetRValue(pxColor);
G := G + GetGValue(pxColor);
B := B + GetBValue(pxColor);
end;

bmpDest.Canvas.Pixels&91;X,Y&93; := RGB(Round(R/tpX),Round(G/tpX),Round(B/tpX));
end;
end;
end;
[/code:1:6e40917f84]

Se alguem precisar esta ae.
flw.




Como é que eu faço pra passar uma imagem que vem do banco como parametro TBitmap para compressao?

E em qual formato posso retorna-la para envio pelo webservice Datasnap?
Responder

Gostei + 0

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

Aceitar