![]() |
JPEG erstellen und Skallieren
Hallo ,
Ich bin neue Delphi Programmiererin. Kann jemanden bitte mir helfen?? Ich möchte ein Bild für Form erstellen, es speichern und anzeigen. Wenn Sie die Anzeige vergrößern, behält das Bild seine Genauigkeit und Größe für die neue Größe bei Form. |
AW: JPEG erstellen und Skallieren
Hallo Zeina,
ich gehe davon aus du lässt das Bild in einem TImage darstellen? Wie vergrößerst du die Anzeige (ganzes Form oder nur TImage)? Hast du beim TImage "Stretch" auf True (ggf. Proportional auch auf "True" um Verzerrungen zu vermeiden)? |
AW: JPEG erstellen und Skallieren
Hallo zeina,
Wir können dir hier helfen, aber es sieht aus als hättest du deine Frage mit Google-Translate übersetzt. Falls dir Englisch besser liegt als Deutsch kannst du es vllt. mal in der englischsprachigen Delphi-Praxis probieren: ![]() We can help you here, but it seems like you translated your question with google translate. If you're better at writing english than german you may want to try the english speaking Delphi-Praxis at ![]() |
AW: JPEG erstellen und Skallieren
Wenn ich es mit Stretch einstellen ,denn die Qualität nicht schön aussieht
Code:
procedure TForm1.SaveJPEG;
begin bmp := TBitmap.Create; try bmp.Assign(Form1.GetFormImage); StringGrid1.Visible := False; jpg := TJpegImage.Create; try jpg.Assign(bmp); jpg.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Foto.jpg'); finally jpg.Free; end; finally bmp.Free; end; end; procedure TForm1.verkleinen; begin jpg := TJpegImage.Create; try jpg.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Foto.jpg'); if jpg.Height > jpg.Width THEN scale := min(Round(Screen.Height / jpg.Height), Round(Form1.Height / jpg.Height)) // org 50 else scale := min(Round(Screen.Width / jpg.Width), Round(Screen.Width / jpg.Width)); // org 50 bmp := TBitmap.Create; try bmp.Width := Trunc(jpg.Width / scale); bmp.Height := Trunc(jpg.Height / scale); bmp.Canvas.StretchDraw(bmp.Canvas.Cliprect, jpg); // Self.Canvas.Draw(0,0, bmp); jpg.Assign(bmp); jpg.CompressionQuality := 100; jpg.Compress; Image1.Picture.Graphic := jpg; finally bmp.Free; end; finally jpg.Free; end; end; procedure TForm1.vergrößen; begin jpg := TJpegImage.Create; try jpg.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Foto.jpg'); if jpg.Height > jpg.Width then scale := max(Round(jpg.Height / Screen.Height), Round(jpg.Height / Form1.Height)) // org 50 else scale := max(Round(jpg.Width / Screen.Width), Round(jpg.Width / Form1.Width)); bmp := TBitmap.Create; try bmp.Width := Round(jpg.Width / scale); bmp.Height := Round(jpg.Height / scale); bmp.Canvas.StretchDraw(bmp.Canvas.Cliprect, jpg); Self.Canvas.Draw(0, 0, bmp); jpg.Assign(bmp); jpg.CompressionQuality := 100; jpg.Compress; Image1.Picture.Graphic := jpg; finally bmp.Free; end; finally jpg.Free; end; end; procedure TForm1.FormResize(Sender: TObject); begin if assigned (Form1) then begin if Form1.WindowState = wsMaximized then begin vergrößen; end else if Form1.WindowState = wsNormal then begin verkleinen; end; end; end; |
Dieses Thema wurde am "01. Feb 2019, 11:10 Uhr" von "Luckie" aus dem Forum "Sonstige Fragen zu Delphi" in das Forum "Multimedia" verschoben.
|
AW: JPEG erstellen und Skallieren
|
AW: JPEG erstellen und Skallieren
Wenn es darum geht, ein Abbild eines Formulars zu erstellen:
JPG ist keine gute Wahl dafür, jedenfalls dann nicht, wenn die Qualität gut sein soll. JPG komprimiert das Bild und ist dabei nicht verlustfrei (Verlust von Bildinformation). Das gilt für Fotos ebenso wie für für Delphiformulare. Bei Formularen fällt es wegen der Bildstruktur allerdings viel mehr auf. Man möchte ein Formular als PNG speichern! (nicht als JPG!) Wenn es JPG sein soll(muss), dann in möglichst geringer Kompresseion, was glaub ich als "Qualtität" anzugeben ist. Z.B. 85 % oder mehr. Damit steigt natürlich die Größe der Datei. Möglicherweise kommen in Deinem Fall auch Effekte zum tragen, die etwas mit der Bildskaliereung auf Deinem Rechner zu tun haben. |
AW: JPEG erstellen und Skallieren
Also bei mir haben werden die Bilder immer so gut angezeigt, wie sie ihrer Ursprungsqualität entsprechen. Bedeutet wenn man natürlich ein16*16px Bild auf 600*600 vergrößert wird die Qualität entsprechend schlecht usw.
Aber warum so Kompliziert? Du könntest dein Bild auch in ein TImage legen: width/Heigth entsprechend der sichtbaren Fläche deines Form Scale = True (Skalierung) Proportional = True (gegen Verzerrung) center = True (Zentrierung) Alignwithmargins = True (damit wird das Bild beim Anpassen der Fenstergröße auch angepasst, wenn Anchors gesetzt sind) Anchors = akLeft, akTop, akRight, akBottom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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