Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bilder verkleinern (https://www.delphipraxis.net/73082-bilder-verkleinern.html)

w-lan 12. Jul 2006 09:34


Bilder verkleinern
 
Hallo,
ich wollte in Delphi ein jpg-Bild einlesen und dies verkleinern. Es soll eine neue Breite eingelesen werden und daraus ergibt sich die neue Höhe mit der Formel :
neue Höhe = aktuelle Höhe *neue Breite / aktuelle Breite

Jedoch wie lade und speichere ich ein jpg in Delphi, wie komme ich an die aktuellen Bilddaten heran (Höhe, Breite, etc.) und wie kann ich das Bild nach der obigen Formel skalieren?

Ist vielleicht ein bisschen viel gefragt.....


... bedanke mich aber für Denkanstösse im Voraus!

Gruß

w-lan

mbamler 12. Jul 2006 09:42

Re: Bilder verkleinern
 
Nimm dir ein zweites TImage und setze das Property "Strech" = true.
Setze die gewünschte Größe
und speicher es dann ab

Gruß
Matthias

Mavarik 12. Jul 2006 09:45

Re: Bilder verkleinern
 
So zum Beispiel:


Delphi-Quellcode:
  Procedure GetDimentions(Xmax,Ymax:integer;Bildname:string;Var Dimx,Dimy:integer;Oversize:boolean);
  var
    x,y,Xa,Ya : integer;
    Image1 : TImage;
  begin
      try
      x := 0;
      y := 0;
      Image1 := TImage.Create(nil);
      Image1.AutoSize := true;
      Image1.Picture.LoadFromFile(Bildname);
      x := Image1.width;
      y := Image1.height;
      finally
        Image1.Free;
      end;

      try

        if (X < XMax) and (Y < YMax)
          then begin // Grafik zu klein!
                  if Oversize then
                        begin
                          if Abs(Y / Ymax) < Abs(X / Xmax)
                            then begin // X Maximieren
                                   DimX := XMax;
                                   DimY := Y*XMax div X;
                                 end
                            else begin // Y Maximieren
                                   DimY := YMax;
                                   DimX := X*YMax div Y;
                                 end;
                        end
                   else begin
                          Dimx := X;
                          DimY := Y;
                        end;
               end
          else begin // Grafik größer!
                  if (X < XMax) or (Y < YMax)
                    then begin
                           if Y>=Ymax
                             then begin // Y Maximieren
                                    DimY := YMax;
                                    DimX := X*YMax div Y;
                                  end
                             else begin // X Maximieren
                                    DimX := XMax;
                                    DimY := Y*XMax div X;
                                  end
                         end
                    else begin
                           if Abs(Y / Ymax) > Abs(X / Xmax)
                             then begin // Y Maximieren
                                    DimY := YMax;
                                    DimX := X*YMax div Y;
                                  end
                             else begin // X Maximieren
                                    DimX := XMax;
                                    DimY := (Y*XMax) div X;
                                  end
                        end;
               end;

      except
        DIMX := 0;
        DIMY := 0;
      end;
  end;
Grüsse Frank

Der_Unwissende 12. Jul 2006 09:58

Re: Bilder verkleinern
 
Hi,
ich glaube du wirst alles nötige in der Forensuche finden, such einfach nach skalieren, jpeg laden und jpeg speichern.
Desweiteren ein grober Ablauf (Suchen musst du selber!):
TJpegImage wirst du brauchen um das Bild zu laden und zu speichern. Arbeiten musst du letztlich mit einem Bitmap Objekt, hier kannst du mittels StretchDraw bzw. StretchBlt leicht die Größe verändern. Wie man lädt, speichert und in ein Bitmap (bzw. zurück) wandelt und wie du die Größe rausbekommst, das findest du sicherlich alles in der OH und in der Suche dieses Forums!

Gruß Der Unwissende

[Anmerkung nach rotem Kasten]Nimm lieber kein TImage objekt, würde ich dir wirklich von Abraten, dafür sind die nicht gedacht. Mag ein einfacherer Weg sein, aber irgendwie nicht wirklich nötig und schön[/Anmerkung]

mbamler 12. Jul 2006 13:07

Re: Bilder verkleinern
 
Wofür sind Images denn gedacht ?
Was spricht gegen einen einfachen Weg ?
Wenn's nicht nötig ist - wie geht's denn einfacher ?
Was ist schön ?

Der_Unwissende 12. Jul 2006 13:52

Re: Bilder verkleinern
 
Zitat:

Zitat von mbamler
Wofür sind Images denn gedacht ?

Nun ja, es sind visuelle Komponenten (aka Controls), die sind nicht zum skalieren sondern zum anzeigen gedacht. Auch mit dem Speichern hat so ein Image recht wenig zu tun. Ein Image soll ein Bild darstellen und schleift den Zugriff auf das Bild auch noch durch.

Zitat:

Zitat von mbamler
Was spricht gegen einen einfachen Weg ?

Die schlechte Angewohnheit eine visuelle Komponente zu verwenden um ein wenig rechnen zu vermeiden. Da er die neue größe aber selbst berechnet, wozu das Image? Was macht es? Es ruft sehr direkt die Methode StretchDraw (oder etwas äquivalentes) auf und letztlich kann dass schon direkt mit dem JPEG gemacht werden.

Zitat:

Zitat von mbamler
Wenn's nicht nötig ist - wie geht's denn einfacher ?

Einfach mit StretchDraw oder StretchBlt arbeiten. Die sind genau dafür gedacht und machen das entsprechend ohne den Overhead einer zusätzlichen (unnötigen und zudem visuellen) Kapselung. Ist nicht schwerer und Images erleichtern einem hier eigentlich nichts, oder?

Zitat:

Zitat von mbamler
Was ist schön ?

Das man sich hier so ruhig unterhalten kann und jeder weiß, dass hier keiner irgendwelche Kritik je persönlich nehmen würde. Denke doch das siehst du ähnlich? :-)
Wie gesagt, es stimmt ja alles, man kann es mit Images machen und um es noch einmal deutlicher zu sagen, ich denke es ist unschön. Hat aber keine Relevanz, ist nur meine subjektive Meinung (schließlich sprach ein Bundestrainer einst von objektiven Meinungen). Jeder kann es auch weiterhin machen wie er möchte und was ich schön finde und was nicht ist natürlich auch völlig egal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz