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ń.

  1. 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?

  2. 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.

  3. 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.