Autor Beitrag
JensLaskowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 168

Win XP
BDS 2006 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: Di 03.07.07 18:10 
Hy,
ich glaube mit Canvas.scale(...) kann man sowas machen.
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 168

Win XP
BDS 2006 Architect
BeitragVerfasst: Do 05.07.07 16:14 
Also danke fü die vielen Vorschläge. habe sie mir alle notiert.

habe micht letztendlich für

ausblenden Delphi-Quelltext
1:
Image.Strech := true					


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: Mo 13.08.07 17:11 
Hallo!

Ich habe ein ähnliches Problem:



ausblenden 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 user profile iconraziel: Delphi-Tags hinzugefügt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 13.08.07 17:16 
oben in uses "JPEG" eintragen! ;-) das is der ganze trick.

lg elundril
Obscure
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: Mo 13.08.07 17:22 
hah, glaubst du ;)

ausblenden Delphi-Quelltext
1:
2:
3:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, jpeg, Psock, NMFtp, ExtCtrls;


hatte ich bereits...
Obscure
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: Mo 13.08.07 17:31 
habe den code jetzt ein wenig geändert und jetzt kommt ein CPU-Fehler... =((


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 13.08.07 17:39 
user profile iconObscure 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: Mo 13.08.07 19:00 
kann mir denn niemand helfen? =(
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 13.08.07 19:08 
user profile iconJayEff 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.

user profile iconObscure hat folgendes geschrieben:
kann mir denn niemand helfen? =(

Schiebepostings sind erst nach 24 Stunden erlaubt... :(

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Obscure
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: Mo 13.08.07 19:19 
user profile iconJayEff 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: 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ß