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.
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
Curtir tópico
+ 0
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.
Se alguem precisar esta ae.
flw.
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.
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
Clique aqui para fazer login e interagir na Comunidade :)