AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPG öffnen, umrechnen und wieder speichern
Thema durchsuchen
Ansicht
Themen-Optionen

JPG öffnen, umrechnen und wieder speichern

Ein Thema von cumi · begonnen am 14. Mär 2005 · letzter Beitrag vom 28. Mär 2005
 
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, 18: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz