Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPG - grösse verändern.... (https://www.delphipraxis.net/3363-jpg-groesse-veraendern.html)

aaron 8. Mär 2003 18:50


JPG - grösse verändern....
 
wie kann ich die breite und höhe eines jpg verändern, ich möchte das die breite immer 51 px hat, die höhe sollte sich dann dynamisch anpassen...
wie geht das? :D

Darty 8. Mär 2003 23:13

Wenn Du das Bild in ein Image ladest, kannst du doch die Width auf 51px stellen. Würde dann so aussehen:
Code:
Image1.width := 51; // Auf Breite 51 Pixel setzen
Image1.Proportional := True; //Damit keine Verzerrung entsteht

aaron 8. Mär 2003 23:48

Proportional wird angemeckert, warum?

Darty 9. Mär 2003 08:03

Damit es sich einpasst. Sonst schneidet es ab ? Oder was wolltest Du jetzt wissen ? :?:

aaron 9. Mär 2003 09:11

Code:
Image1.Proportional
bleibt in der ide bei Proportional hängen...

Mirilin 9. Mär 2003 09:20

Du meinst Du kriegst diese Meldung :
Zitat:

[Fehler] Unit1.pas(28): Undefinierter Bezeichner: 'proportional'
?

Oder was?

aaron 9. Mär 2003 09:21

ja, genau..

Mirilin 9. Mär 2003 09:31

Welche Delphiversion hast Du?
Ich habe die 4.
Und bei mir kommt die selbe Meldung.
Könnte es sein, dass diese Property erst ab der Version 5 vorhanden ist?


Mirilin.

************************************************** *********************
PS :
Denkanstoss

Faktor = AlteBreite / NeueBreite

Und dann die Höhe mit dem Faktor versehen.
************************************************** *********************

aaron 9. Mär 2003 09:34

delphi 5
es wäre doch zu shön wenn das mit dem
Code:
Image1.Proportional := True;
klappen würde...
das mit dem faktor stimmt, nur bekomme ich das nicht hin :(

Daniel B 9. Mär 2003 09:39

Hallo,

unnter D6 lässt sich das ganze komplizieren und funktioniert auch wie es soll.

Grüsse, Daniel :hi:

aaron 9. Mär 2003 09:46

wie kann ich das ganze aufrufen?
so?
Code:
procedure TForm1.Button6Click(Sender: TObject);
begin
Image1.width := 51; // Auf Breite 51 Pixel setzen
Image1.Proportional := True; //Damit keine Verzerrung entsteht
Image1.Picture.SaveToFile('c:\1.jpg');

end;

Darty 9. Mär 2003 10:06

Heisst dass Du willst die Grösse eines Bildes verändern und dann so speichern ??

Übrigens ich habe Delphi6 und da klappt es mit Proportional ?
Fehlt er bei Dir in der Eigenschaft von TImage ?

Hier noch ein Auszug aus der Delphi-Hilfe zu Proportional
Code:
Die Eigenschaft Proportional gibt an, ob die Grafik ohne Verzerrung geändert werden soll, damit sie in das Steuerelement paßt.

property Proportional: Boolean;

Beschreibung

Setzen Sie Proportional auf True, damit die Grafik vollständig im TImage-Steuerelement angezeigt wird und keine Verzerrungen wie bei der Eigenschaft Stretch vorkommen. Grafiken, die zu groß für das Steuerelement sind, werden solange skaliert (wobei das Bildseitenverhältnis beibehalten wird), bis sie in dem Steuerelement vollständig angezeigt werden können. Zu kleine Grafiken werden in der normalen Größe dargestellt. Proportional kann Grafiken verkelinern, aber nicht vergrößern.

Wenn sich die Größe des Steuerelements ändert, wird die Größe der Grafik ebenfalls verändert.

Mit der Eigenschaft Stretch kann die Größe von Grafken so angepaßt werden, daß sie exakt in das Steuerelement passen. Bei Stretch müssen Sie aber mit Verzerrungen rechnen.

Mit der Eigenschaft AutoSize läßt sich die Größe des Steuerelements an die Größe der Grafik anstatt umgekehrt anpassen.

Der Vorgabewert für Proportional ist False.

Hinweis

Proportional hat keine Auswirkungen, wenn in der Eigenschaft Picture ein Symbol angegeben ist.

Daniel B 9. Mär 2003 10:07

Zitat:

Zitat von aaron
wie würde ich das ganze aufrufen?
so?

1. Warum probierst Du das nicht aus?
2. Nein, es wird sonst das original-Bild gespeichert, nicht kleiner. //Passiert jedenfalls bei mir.

Grüsse, Daniel :hi:

aaron 9. Mär 2003 10:32

@Daniel B
der grund warum ich hier poste ist der, dass ich nicht weiterkomme..ich probiere schon die ganze zeit rum :)
@M.Knebel
habe mir delphi 7 runtergeladen..., müsste also funktionieren.

kann mir jemand ein praktisches beispiel zeigen.
"source" ?

Darty 9. Mär 2003 10:59

Wenn ich jetzt nicht aufgehalten werde von meiner Family, werde ich mal auf die schnelle ne Beispiel Programm schreiben ..

aaron 9. Mär 2003 11:10

danke :dancer2:

Darty 9. Mär 2003 15:20

Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

habe hier ein kleines Beispiel-Programm zu TImage geschrieben. Ist
in gezippter Form mit den SOurce und Exe.
Lade erst eine Grafik ein, dann kannst Du die Werte verstellen um zu sehen was es bewirkt. Ich habe TImage auf ein ScrollBox gelegt.
Falls noch fragen gibt zu dem Source oder sonst was dann poste es..

Viel Erfolg noch ..

aaron 9. Mär 2003 15:22

DANKE
ich schau es mir sofort an...

aaron 9. Mär 2003 15:47

vielen dank für dein anschuliches beispiel...
leider habe ich immer noch ein grosses problem (wann habe ich das mal nicht :oops: )ich habe ein bild geladen und habe mit
Delphi-Quellcode:
Image1.Proportional := True;
das bild auf 51 px breite gebracht, hatte die scollbox auf 51 px gestellt...
wollte dann mit
Delphi-Quellcode:
Image1.Picture.SaveToFile('c:\1.jpg');
das bild speichern, wenn ich mir das bild dann anschaue, dann hat es aber immer noch die gleiche grösse wie beim laden.

Daniel B 9. Mär 2003 16:03

Hallo,
Zitat:

Zitat von aaron
vielen dank für dein anschuliches beispiel...
leider habe ich immer noch ein grosses problem (wann habe ich das mal nicht :oops: )ich habe ein bild geladen und habe mit
Delphi-Quellcode:
Image1.Proportional := True;
das bild auf 51 px breite gebracht, hatte die scollbox auf 51 px gestellt...
wollte dann mit
Delphi-Quellcode:
Image1.Picture.SaveToFile('c:\1.jpg');
das bild speichern, wenn ich mir das bild dann anschaue, dann hat es aber immer noch die gleiche grösse wie beim laden.

Und Du hast mein Posting nicht gelesen!
Zitat:

Zitat von Daniel B.
2. Nein, es wird sonst das original-Bild gespeichert, nicht kleiner. //Passiert jedenfalls bei mir.

Grüsse, Daniel :hi:

Darty 9. Mär 2003 16:04

@Aaron: Dass ist logisch. Du veränderst nur die Darstellung vom Bild, und nicht das Bild selbst.
Also heisst Deine Frage eigentlich: Wie verändere ich die Grösse eines Bildes und speichere es als jpg.

Ich schau mal ob ich was habe für Dich, da ich mich damit noch nicht beschäftigt hatte .´..

Darty 9. Mär 2003 16:09

Gerade habe ich "Suchen"-Funktion in diesen Forum nach "jpeg" gesucht, und dabei kam dass hier raus ..

JPEG verkleinern

Sicher kommste damit weiter ;)

@Daniel B: Warste wieder schneller ;)

aaron 9. Mär 2003 16:13

au weja, ich habe mich dann falsch ausgedrückt, entschuldigung!

das mit dem öffnen und speichern habe ich hier, nur das anpassen der höhe ist nicht so wie ich es haben möchte...


Code:
procedure TForm1.Button7Click(Sender: TObject);
var
  i: Integer;
  InFileName, OutFileName: string;
  FilePath, FileName: string;
  JPEG  : TJPEGImage;
  bFrom,bTo : tBitmap;
  aRect : tRect;
    sFile: string;
  wWidth, wHeight: word;
  H1,B1,H2:integer;
begin
       sFile := OpenDialog1.FileName;
  GetJPGSize(sFile, wWidth, wHeight);
  Edit1.Text := IntToStr(wWidth);
   B1:= strtoint(edit1.text);
    Edit2.Text := IntToStr(wHeight);
    H1:= strtoint(edit2.text);

  try
    BFrom := TBitmap.Create;
    BTo := TBitmap.Create;

    JPEG := TJPEGImage.create;
    JPEG.LoadFromFile(opendialog1.FileName);

    //in ein Bitmap übergeben und jpeg freigeben
    BFrom.assign(jpeg);
    JPEG.free;

    //Rechteck als &Zeichnungsfläche zur verfügung stellen
    aRect.top := 0;
    aRect.left := 0;
    aRect.right := 150;
    aRect.Bottom := 150;                  

    //Grösse des Zielbitmaps festlegen
      bTo.Height := 150;     // hier müsste sich die höhe anpassen ????
      bTo.width := 51; // Auf Breite 51 Pixel setzen
     Image1.Proportional := True; //Damit keine Verzerrung entsteht
    //bitmap in das rechteck zeichnen und dem neuen bitmap &Bto& verkleinert übergeben
    Bto.canvas.StretchDraw(ARect, bFrom);

    //verkleinertes Bitmap wieder in jpeg umwandeln
    JPEG := TJPEGImage.create;
    JPEG.Assign(bTo);
    //Kompressionsqualität einstellen und abspeichern
    JPEG.Performance:=jpBestQuality ;

  //  JPEG.compressionQuality := trackbar1.Position;
    JPEG.JPEGNeeded;
    JPEG.compress;
    InFileName:=opendialog1.FileName;
    FileName:=ExtractFileName(InFileName);
   // FilePath:=IncludeTrailingBackSlash(OutDirEdit.Text);
    OutFileName:=Concat('c:\test.jpg');
    JPEG.savetofile(OutfileName);
  //  StatusBar1.SimpleText:='Fertig!';
    BFrom.Free;
    Bto.free;
    jpeg.free;
    except
  end;

    end;

Darty 9. Mär 2003 22:13

Habe es mir zwar noch nicht genau angeschaut, und habe auch gerade nichts passendes von mir ..

Aber hast Du Dir mal die Codes von FuckRacism angeschaut ?
Code:
procedure TForm1.resizepictur(dir: string; width, height: integer);
var i:integer;
    bmp:TBitmap;
    jpeg:TJpegImage;
   begin
   Jpeg:=TJpegImage.Create;
   try
   jpeg.LoadFromFile(dir);
    bmp:=TBitmap.Create;
      try
        If jpeg.width>jpeg.Height then
         begin
          bmp.width:=width;
          bmp.height:=height;
         end else
         begin
          bmp.width:=height;
          bmp.Height:=width;
         end;
        bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg);
        jpeg.assign(bmp);
      finally
       bmp.free;
      end;
     jpeg.SavetoFile(dir);
   finally
    jpeg.free;
   end;
end;

aaron 9. Mär 2003 22:24

hab ich schon, denke damit komme ich auch soweit klar... vielen dank für deine hilfe, und entschuldige meine unklare fragestellung.

gruss aaron

Darty 9. Mär 2003 22:33

Macht nix, das kleine Program das ich schrieb konnte ich gut gebrauchen, da ich gerade an ein anderen Programm dran war wo ich mit den Eigenschaften je nach Situation wechseln musste und dann am Ende verwirrt war. Nun kann mit Hilfe dieser Orientieren :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz