Witam!
Napisałem w Delphi program do zmiany rozmiaru plików JPEG. Tworzy on kopię pliku wejściowego pomniejszoną 3-krotnie. Mam w związku z tym parę pytań.
-
Kiedy linijki "try" i "except" nie były skomentowane, program za żadne skarby nie chciał zmodyfikować rozmiaru plików JPEG zapisanych przez aparat (NIKON Coolpix 4100). Nazywały się DscnXXXX.jpg, gdzie XXXX to numer 0000-9999. Ręczna zmiana nazwy pliku od razu naprawiała problem. Czy ktoś ma pojęcie, czemu tak się dzieje/działo?
-
Program czasem zamiast przeskalować plik 3-krotnie, po prostu obcina go w 1/3 długości i wysokości i otrzymuję tylko fragment pliku wejściowego naturalnej wielkości.
-
Czy można przyspieszyć działanie tego kodu?
Linijki try i except skomentowałem dopiero przed chwilą i nie wiem, czy będą miały jakiś znaczący wpływ na działanie. Poza tym np. problem ucinania obrazka pojawiał się rzadko i trudno mi sprawdzić, czy się jeszcze powtarza.
program Resizer;
uses
SysUtils, JPEG, Graphics, Classes{, Dialogs};
{$R *.res}
var
JPG : TJPEGImage;
BMP : TBitmap;
NewHeight, NewWidth : Integer;
OldName, NewName:string;
i :integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
if (ParamCount<1) then begin
{ ShowMessage('Nie podano parametrów!');}
halt;
end;
JPG := TJPEGImage.Create;
BMP := TBitmap.Create;
for i:=1 to ParamCount do begin
{ try}
OldName:=ParamStr(i);
if ((ExtractFileExt(OldName)<>'.jpg') and (ExtractFileExt(OldName)<>'.jpeg')) then continue;
JPG.LoadFromFile(OldName);
NewName:=ExtractFilePath(ParamStr(i))+'sm_'+ExtractFileName(ParamStr(i));
BMP.Assign(JPG);
NewHeight := BMP.Height div 3; //tu ustawiamy jaką wielkośc ma mieć pomniejszony obrazek
NewWidth := BMP.Width div 3;
BMP.Canvas.StretchDraw(Rect(0, 0, NewWidth, NewHeight), BMP);
BMP.Width := NewWidth;
BMP.Height := NewHeight;
JPG.Assign(BMP);
JPG.SaveToFile(NewName);
{ except
end;}
end;
BMP.Free;
JPG.Free;
end.