Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Fr 13.01.06 22:51 
Hallo, ich möchte ein jpg Image verkleinern und wieder abspeichern, dazu habe ich folgenden code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
procedure TForm1.Button5Click(Sender: TObject);
var 
jpeg, jpg: TJPEGImage;
bmp: TBitmap;
begin jpeg:=TJPEGImage.Create;

try
openpicturedialog1.execute;
jpeg.LoadFromFile(openpicturedialog1.FileName);
bmp:=TBitmap.Create;  
 try
 bmp.Assign(jpeg);
  bmp2 := TBitmap.Create;
  bmp2.Width := 350;
  bmp2.Height := 350;
  bmp2.Canvas.StretchDraw(Rect(0,0,bmp2.Width-1,bmp2.Height-1),bmp);
BmpToJpg(openpicturedialog1.FileName);


finally
bmp.free;
bmp2.free;
end; 
finally   
jpeg.free; 
end;
end;


Procedure TForm1.BmpToJpg(const Filename: String; Quality: TJPEGQualityRange=100);
var

Jpg: TJpegImage;
begin

Jpg:=TJpegImage.Create;
try  

  Jpg.CompressionQuality:=Quality;
  Jpg.Assign(Bmp2);
  Jpg.SaveToFile(ChangeFileExt(FileName, '.jpg' ));
finally 
 Jpg.Free;

end;
end;


Das funktioniert auch soweit aber erstens können die bilder verzerrt sein und zweitens sind die jpg´s nachher größer als vorher.
Meine Fragen nun, wie kann ich die neue Bildhöhe in abhängigkeit von der Bildbreite berechnen, also wenn ich eine bildbreite von 300 habe soll die höhe entsprechend dem verhältniss des ursprungsbildes angepasst werden.
Zweitens: Wie kann ich die Dateigröße verkleinern? Ich hab die g32.org graphics libary installiert, kann ich damit irgendwas machen ?
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 14.01.06 23:36 
lso das Problem mit der Dateigröße at sich erledigt, hab jetzt nur noch das Problem mit dem Bildverhältniss...
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: So 15.01.06 09:07 
Ich hab mir mal eine Function dazu geschrieben, ist nicht genau das was Du suchst aber in etwa.
Du musst das Verhälnis von Breite zu Höhe ermitteln und dann demenstprechend die werte setzen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function Breite4zu3(Bild:String; Breite:Integer):String;
  var
  Hoehe:Integer;
begin
  try
   Bmp := TBitmap.Create;
   Bmp.LoadFromFile(Bild+'.bmp');
   Bmp1 := TBitmap.Create;
   Hoehe:= Breite div 4*3;
   Bmp1.Width := Breite;
   Bmp1.Height := Hoehe;
   SetStretchBltMode(Bmp1.Canvas.Handle, Halftone);
   StretchBlt(Bmp1.Canvas.Handle,0,0,Bmp1.width,Bmp1.height,
   Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,SRCCOPY);
   Bmp1.SaveToFile(Bild+'.bmp');
  finally
   Bmp.Free;
   Bmp1.Free;
  end;
end;
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: So 15.01.06 11:28 
danke so ist das schon OK