Einzelnen Beitrag anzeigen

Benutzerbild von cumi
cumi

Registriert seit: 27. Jun 2004
Ort: Schweiz
27 Beiträge
 
#1

JPG öffnen, umrechnen und wieder speichern

  Alt 14. Mär 2005, 19:11
Hallo Zusammen

Ich bin an einer Prozedur, welche JPG-Bilder öffnet, in TBitmap32 umwandelt, dort die grösse umrechnet und dann wieder als jpg speichert.
Es muss ein TBitmap32 sein weil ich später noch ein Logo halbtransparent raufzeichen möchte...
hier der Code:
Delphi-Quellcode:
var
  e :TListElement;
  hp :TpListElement;
  i :Integer;
  img1 :TBitmap32;
  img2 :TBitmap;
  jpg :TJPEGImage;
  dheight,
  dwidth,
  nheight,
  nwidth,
  quali :Integer;
begin
  dwidth :=StrToInt(EdNWidth.Text);
  dheight:=StrToInt(EdNHeight.Text);
  quali :=StrToInt(EdQuali.Text);
  i:=1;
  hp:=pFirst;
  while hp<>pLast do begin
    hp:=hp^.pNext;
    inc(i);
  end;
  Pb.Max:=i;
  i:=1;
  if FirstListEl(e) then begin
    repeat
      jpg:=TJPEGImage.Create;
      jpg.Performance:=jpBestQuality;
      jpg.CompressionQuality:=100;
      jpg.LoadFromFile(e.pfad+'\'+e.name);
      img1:=TBitmap32.Create;
      img1.Assign(jpg);
      jpg.Free;
      if (img1.Height/img1.Width)>=(dheight/dwidth) then begin
        nheight:=dheight;
        nwidth :=round(nheight*img1.width/img1.height);
      end
      else begin
        nwidth:=dwidth;
        nheight :=round(img1.Height/img1.Width*nwidth);
      end;
      img2:=TBitmap.Create;
      img2.Width:=nwidth;
      img2.Height:=nheight;
      img1.DrawTo(img2.Canvas.Handle,
                  rect(0,0,nwidth,nheight),
                  rect(0,0,img1.Width,img1.Height));
      jpg:=TJPEGImage.Create;
      jpg.Performance:=jpBestQuality;
      jpg.CompressionQuality:=quali;
      jpg.Assign(img2);
      jpg.SaveToFile(e.pfad+'\_'+e.name);
      inc(i);
      Pb.Position:=i;
      jpg.Free;
      img1.Free;
      img2.Free;
    until not NextListEl(e);
  end;
  Pb.Position:=0;
Also und jetzt das Problem. Eigentlich funktioniert alles ganz schön. Ausser, dass irgendetwas mit den Farben nicht ganz stimmt. Das Orginalbild (1024*768) sieht so aus:http://lorenz.koestler.ch/other/1.JPG
Und das umgerechnete Bild, welches nun eine Auflösung von (800*600) hat sieht so ausas Orginalbild (1024*768) sieht so aus:http://lorenz.koestler.ch/other/_1.JPG

Weiss jemand woran das liegt? Ich vermute, dass ich irgendetwas mit den Farbeinstellungen von der TBitmap32 Variabel falsch mache, nur was?

Hat vielleicht jemand noch eine Idee, was ich noch verschnellern könnte?

[edit=thomasdrewermann] Mfg, thomasdrewermann[/edit]
Lorenz
  Mit Zitat antworten Zitat