Autor |
Beitrag |
JensLaskowski
      
Beiträge: 168
Win XP
BDS 2006 Architect
|
Verfasst: Di 03.07.07 18:05
Hallo,
in meinem Programm kann der Anwender wahlweise ein bmp oder jpg bild hochladen und wird in einem Odner gespeichert. Der Pfad zum Bild wird in einer DB gespeichert.
Dann kann man das Bild aufrufen. Nun will ich aber dass das Bild die Größe von 130*145 nicht überschreitet. Wenn jetzt die Bilder, die hochgeladen werden größer sind, werden sie in der TImage nicht richtig angezeigt oder nur das was hineinpasst. Da ich die TImage Komponente aber nicht größer machen kann/will, suche ich nach einer Funktion, die die Bilder beim speichern gleich in die richtige Größe ändert.
Mit freundlichen Grüßen
JensLaskowski
_________________ Nichtstun macht nur dann Spaß, wenn man eigentlich viel zu tun hätte.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 03.07.07 18:09
Wenn es dir auf den Speicherplatzverbrauch großer Bilder ankommt, kann ich dir nicht helfen, aber wenn's darauf nich ankommt, Image1.Stretch := true; 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Di 03.07.07 18:10
Hy,
ich glaube mit Canvas.scale(...) kann man sowas machen.
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 03.07.07 18:24
Also, du kannst in dein Hochladeprogramm einfach das Bild erstmal verkleinern (aber im Maßstab bitte^^) bis entweder maximale breite oder höhe erreicht ist. DAs in Variable breite und höhe speichern, und mit Canvas.StretchDraw verkleinern und dann hochladen!
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Di 03.07.07 18:45
Dafür gibt es die schöne procedure ScaleImage
is, wenn ich mich recht entsinne, in der unit GraphUtils zu finden (oder einfach Graphics)
greez
_________________ erare humanum est
|
|
JensLaskowski 
      
Beiträge: 168
Win XP
BDS 2006 Architect
|
Verfasst: Do 05.07.07 16:14
Also danke fü die vielen Vorschläge. habe sie mir alle notiert.
habe micht letztendlich für
Delphi-Quelltext
endschieden, weil das für meinen Zweck völlig ausreicht.
Mit freundlichen Grüßen
JensLaskowski
_________________ Nichtstun macht nur dann Spaß, wenn man eigentlich viel zu tun hätte.
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Mo 13.08.07 17:11
Hallo!
Ich habe ein ähnliches Problem:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.bntopenClick(Sender: TObject); var i : integer; hoch, breit,pfad : string; begin hoch := IntToStr(img.Picture.height); breit := IntToStr(img.Picture.Height); open.Filter := 'Bilddatei |*.JPEG;*.JPG;*.jpeg;*.jpg'; if open.Execute then lbdatei.Items := open.Files ;
for i := 0 to lbdatei.Items.Count -1 do begin pfad := lbdatei.Items.Text; img2.Picture.LoadFromFile(pfad); if img2.Picture.Width >= img2.Picture.Height then begin img.Canvas.StretchDraw(img.Canvas.ClipRect, img2.Picture.Graphic); img2.Picture.SaveToFile(pfad); end; end;
end; |
Es kommt ein fehler: Unbekannte Dateiendung .JPG . JPEG.
Woran kann das liegen? Oder ist da vielleicht ein aderer Fehler?
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 13.08.07 17:16
oben in uses "JPEG" eintragen!  das is der ganze trick.
lg elundril
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Mo 13.08.07 17:22
hah, glaubst du
Delphi-Quelltext 1: 2: 3:
| uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, jpeg, Psock, NMFtp, ExtCtrls; |
hatte ich bereits...
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Mo 13.08.07 17:31
habe den code jetzt ein wenig geändert und jetzt kommt ein CPU-Fehler... =((
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.bntopenClick(Sender: TObject); var hoch, breit,i : integer; pfad : string; begin
open.Filter := 'Bilddatei |*.JPEG;*.JPG;*.jpeg;*.jpg'; if open.Execute then lbdatei.Items := open.Files ;
for i := 0 to lbdatei.Items.Count -1 do begin pfad := lbdatei.Items.Strings[i]; img.Picture.LoadFromFile(pfad); hoch := img.Picture.height; breit := img.Picture.Height; if img2.Picture.Width >= img2.Picture.Height then begin img.Canvas.StretchDraw(img.Canvas.ClipRect, img2.Picture.Graphic); img2.Picture.SaveToFile(pfad); end; end;
end; |
irgendwas mache ich da falsch.. Außerdem wird angeblich der Wert "höhe" und "breite" nie benutz, obwohl, wenn ich einen Breakpoint setze, die Maße des Bildes angezeigt werden....
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 13.08.07 17:39
Obscure hat folgendes geschrieben: | Außerdem wird angeblich der Wert "höhe" und "breite" nie benutz, obwohl, wenn ich einen Breakpoint setze, die Maße des Bildes angezeigt werden.... |
Ausser der Zuweisung hoch := img.Picture.height; und breit := img.Picture.Height; wird auch auf beide Variablen nicht mehr zugegriffen. Darum die Fehlermeldung "Zugewiesener Wert wird nicht benutzt".
Interessant wäre, was für ein Fehler denn genau kommt.
Ausserdem frage ich mich, warum du auf img1 das Bild von img2 zeichnest, und dann img2 unverändert speicherst... Ich vermute das Problem liegt daran, dass img2.Picture nil ist. Vielleicht solltest du in dieses Image etwas laden.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Mo 13.08.07 18:20
ich hab mal nen Screenshot gemacht.... Siehe Dateianhang CPU-Fehler... Dieser Fehler kam, als ich ein Bild mit Maßen 2000*1200 ode rso geöffnet habe.
Wenn ich jedoch ein Bild mit kleineren Maßen habe, kommt ein anderer Fehler.
Ich wieß nciht was ich da falsch amche =(
Einloggen, um Attachments anzusehen!
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Mo 13.08.07 19:00
kann mir denn niemand helfen? =(
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 13.08.07 19:08
JayEff hat folgendes geschrieben: | Ich vermute das Problem liegt daran, dass img2.Picture nil ist. Vielleicht solltest du in dieses Image etwas laden. |
Dazu passt auch die EInvalidOperation (btw STRG+C knnst diese Meldungen mit STRG+C kopieren, dann wird nur deren Text kopiert. Muss kein Screenshot sein.), von wegen "kann nur durchgeführt werden, wenn xy ein Bild enthält.
Wie gesagt: Du lässt img2 einfach leer und arbeitest trotzdem damit, img2.picture ist damit nil.
Obscure hat folgendes geschrieben: | kann mir denn niemand helfen? =( |
Schiebepostings sind erst nach 24 Stunden erlaubt... 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Mo 13.08.07 19:19
JayEff hat folgendes geschrieben: | Schiebepostings sind erst nach 24 Stunden erlaubt...  |
sry, brauche recht dringend ne lösung =(
wie dem auch sei, wird jetzt die datei in img2.picture geladen. das bild sehe ich auch. habe aber das img2 extra klein gemacht um das zu testen. jetzt soll das andere Timage(img) die bildergröße des img2 haben. img 2 soll also das bild in angegeben Maße(400*533 horizontal, 533*400 vertikal) erhalten. jedoch nicht einfach die ränder abschneiden, sondern "resizen"....
|
|
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: Di 14.08.07 16:19
ich habs schon selbst heraus gefunden.
blog.proxymis.com/?p=37 hier wirds genau beschrieben. Die Graphics Komponente gibts hier: g32.org/
Viel Spaß
|
|