Registriert seit: 23. Apr 2004
Ort: Berlin
19 Beiträge
|
Galeriebastler mit Thumbmaker, effektivität des Programms?
7. Jun 2004, 21:01
Hi Leute,
ich bin gerade aktiv am Delphilernen und mache mir deswegen ein Programm, mit dem Thumbs und eine Galerie erstellen kann. Den Teil für die Thumbnailerstellung hab ich jetzt fertig und wollte mal fragen, was ihr davon so haltet.
Delphi-Quellcode:
function substr(str:string; a,e:integer):string;
var iFor:integer;
begin
result:='';
for iFor:=a to e do result:=result+str[iFor];
end;
function ExtractDateiName(dateiname, counterstr, name:string):string;
var iFor:integer;
begin
result:=''; iFor:=1;
while iFor <= length(dateiname) do begin
if dateiname[iFor] = '[' then begin
if substr(dateiname, iFor, iFor+6) = '[index]' then begin
result:=result+counterstr; iFor:=iFor+6; end
else if substr(dateiname, iFor, iFor+5) = '[name]' then begin
result:=result+name; iFor:=iFor+5; end
else result:=result+dateiname[iFor];
end else result:=result+dateiname[iFor];
iFor:=iFor+1;
end; // while
end;
procedure GetNewSize(Bitmap : TBitmap32; MaxWidth, MaxHeight : integer; var NewWidth, NewHeight : integer);
begin
if Bitmap.Width > Bitmap.Height then begin
NewWidth:=MaxWidth;
NewHeight:=round(NewWidth / (Bitmap.Width / Bitmap.Height));
if NewHeight > MaxHeight then begin
NewHeight:=MaxHeight;
NewWidth:=round(Bitmap.Width / Bitmap.Height * NewHeight);
end;
end else begin
NewHeight:=MaxHeight;
NewWidth:=round(Bitmap.Width / Bitmap.Height * NewHeight);
if NewWidth > MaxWidth then begin
NewWidth:=MaxWidth;
NewHeight:=round(NewWidth / (Bitmap.Width / Bitmap.Height));
end;
end;
end;
procedure Timport.Fertigstellen;
var
iFor, Breite, Hoehe : integer;
counterstr, name : string;
images : TBilder;
AktuellesBild, AngepasstesBild : TBitmap32;
jpg : TJPEGImage;
bmp : TBitmap;
begin
if eigenschaften.fu_thumbserstellen.Checked then begin
setlength(images, 0);
// Verzeichnis erstellen, falls nicht existiert
if not DirectoryExists(ausgabeseite.fu_hauptpfad.Text) then ForceDirectories(ausgabeseite.fu_hauptpfad.Text);
for iFor:=0 to fu_BilderBox.Count-1 do if FileExists( import.fu_BilderBox.Items.Strings[iFor] ) then begin
try
setlength(images, iFor+1);
AktuellesBild:=TBitmap32.Create;
AngepasstesBild:=TBitmap32.Create;
AktuellesBild.StretchFilter:=sfLanczos;
AktuellesBild.LoadFromFile(import.fu_BilderBox.Items.Strings[iFor]);
counterstr:=inttostr(iFor);
if iFor<100 then counterstr:='0'+counterstr;
if iFor<10 then counterstr:='0'+counterstr;
jpg := TJPEGImage.Create;
bmp := TBitmap.Create;
// Bild verkleinern
GetNewSize(AktuellesBild, eigenschaften.fu_tbreite.Value, eigenschaften.fu_thoehe.Value, Breite, Hoehe);
AngepasstesBild.setSize(Breite, Hoehe);
AngepasstesBild.Draw(rect(0,0,Breite,Hoehe), Rect(0,0,AktuellesBild.Width, AktuellesBild.Height), AktuellesBild);
// Minibild
bmp.Assign(AngepasstesBild);
jpg.Assign(bmp);
name:=ExtractDateiName(eigenschaften.fu_tdateiname.Text, counterstr, substr(ExtractFileName(import.fu_BilderBox.Items.Strings[iFor]),1,length(ExtractFileName(import.fu_BilderBox.Items.Strings[iFor]))-4));
jpg.SaveToFile(ausgabeseite.fu_hauptpfad.Text+name+'.jpg');
images[iFor].mini:=name+'.jpg';
// Originalbild an neue Größe anpassen
if ( eigenschaften.fu_groesseaendern.Checked ) and ( ( AktuellesBild.Width >= eigenschaften.fu_obreite.Value ) or ( AktuellesBild.Height >= eigenschaften.fu_ohoehe.Value ) ) then begin
GetNewSize(AktuellesBild, eigenschaften.fu_obreite.Value, eigenschaften.fu_ohoehe.Value, Breite, Hoehe);
AngepasstesBild.SetSize(Breite, Hoehe);
AngepasstesBild.Draw(rect(0,0,Breite,Hoehe), Rect(0,0,AktuellesBild.Width, AktuellesBild.Height), AktuellesBild);
AktuellesBild.Assign(AngepasstesBild);
end;
// Originalbild
bmp.Assign(AktuellesBild);
jpg.Assign(bmp);
name:=ExtractDateiName(eigenschaften.fu_odateiname.Text, counterstr, substr(ExtractFileName(import.fu_BilderBox.Items.Strings[iFor]),1,length(ExtractFileName(import.fu_BilderBox.Items.Strings[iFor]))-4));
jpg.SaveToFile(ausgabeseite.fu_hauptpfad.Text+name+'.jpg');
images[iFor].orig:=name+'.jpg';
finally
AktuellesBild.Free;
AngepasstesBild.Free;
jpg.Free;
bmp.Free;
end;
end; // For + IF Bild existiert
end; // IF Thumbs erstellen
end;
das Programm (unfertig, Galerien können noch nicht erstellt werden) ist im Anhang.
Dass die Elemente noch ein wenig seltsam Angeordnet sind, werde ich später noch verändern. Versucht einfach damit klar zu kommen.
Es soll wie ein WinDialog aussehen. Jede Seite hat dabei ein eigenes Forumlar, später will ich alle Elemente jedoch auf ein Formular platzieren und ein und ausblenden.
Achso, ich nutze die Graphics32-Lib! ( http://g32.org )
mfg gwxxl
|