Kokeilu

Tällä koodilla onnistuu kääntäminen, kaikki muu paitsi että Image2 skaalaus ei pure, vaan kuvasta tulee vain osa näkyviin ikkunaan, joka on oikean kokoinen ja oikeassa asennossa.

procedure TForm1.bRotateClick(Sender: TObject);
const
 Tmp1 = 'f:\apu\pic1.jpg';
 Tmp2 = 'f:\apu\pic2.jpg';
var
 F: file;
begin
{  WinExec('g:\dlp4\jpeg\JPEGTRAN.EXE -rotate 90 F:\Foto\00-Kokeilu\Juho.jpg Juhop.jpg',SW_SHOW); }
 {Huom! JPEGTRAN on 16 bittinen ja hyväksyy vain lyhyet nimet; esim 00-Kokeilu ei käy }
  Image1.Picture.SaveToFile(Tmp1);
   AssignFile(F,Tmp1);
   repeat
    {$I-}
    Reset(F);
    {$I+}
   until IOResult = 0;
   CloseFile(F);
   WinExec('g:\dlp4\jpeg\JPEGTRAN.EXE -rotate 90 F:\apu\Pic1.jpg F:\apu\Pic2.jpg',SW_SHOW);
   AssignFile(F,Tmp2);
   repeat
    {$I-}
    Reset(F);
    {$I+}
   until IOResult = 0;
   CloseFile(F);
   Image2.Picture.LoadFromFile(Tmp2);
   if Image2.Picture.Width>Image2.Picture.Height then
   begin
    Image2.Height := DiS2;
    Image2.Width  := DiS1;
   end
  else
   begin
    Image2.Height := DiS1;
    Image2.Width  := DiS2;
   end;
   Image2.Picture.SaveToFile(trnNimi);
{  Myös seuraava toimii, mutta on hidas }
(*  with Image1.Picture do begin
   for i := 1 to Width do begin
    for j := 1 to Height do begin
     Image2.Canvas.Pixels[i-Image1.Top,j-Image1.Left] := Canvas.Pixels[j,i];
    end; {for j}
   end; {for i}
  end; {with Canvas}
  Image2.Picture.SaveToFile(FotoDir+'\'+'KokAjk.bmp'); *)
{  ShowMessage('Kuva valmis'); }
end;

Tällä koodilla onnistuu myös, mutta hidas

procedure TForm1.bKokClick(Sender: TObject);
var
 i,j: integer;
begin
  jpgNimi := PictureList.Items.Strings[0];
  Image1.Picture.LoadFromFile(FotoDir+'\'+jpgNimi);
  if Image1.Picture.Width>Image1.Picture.Height then
  begin
   Image1.Height := DiS2;
   Image1.Width  := DiS1;
   Image2.Height := DiS1;
   Image2.Width  := DiS2;
  end
 else
  begin
   Image1.Height := DiS1;
   Image1.Width  := DiS2;
   Image2.Height := DiS2;
   Image2.Width  := DiS1;
  end;
  Image1.Refresh;
  with Image1.Picture do begin
   for i := 1 to Width do begin
    for j := 1 to Height do begin
     Image2.Canvas.Pixels[i-Image1.Top,j-Image1.Left] := Canvas.Pixels[j,i];
    end; {for j}
   end; {for i}
  end; {with Canvas}
end;

Tässä command-line ohjelma JPEGTRAN.EXE

DOSissa toimii juuri kuten pitääkin (ja nopeasti):
JPEGTRAN -rotate 90 juho.jpg juhop.jpg 
Tämän jos saisi Delphin sisälle, olisi homma selvä 
Nämä tällaisenaan eivät toimi:
  WinExec('JPEGTRAN.EXE -rotate 90 jpgNimi jpgName',SW_SHOW);
  WinExec('JPEGTRAN.EXE -rotate 90 f:\foto\00-Kokeilu\Juho.jpg Juhop.jpg',SW_SHOW);
Kokeilu:
 WinExec('g:\dlp4\jpeg\JPEGTRAN.EXE -rotate 90 f:\foto\00-Kokeilu\Juho.jpg Juhop.jpg',SW_SHOW);
Virheilmoitus:
G:\DLP4\JPEG\JPEGTRAN.EXE: can't open f:\foto\00-Kokeilu\Juho.jpg
WinExec('g:\dlp4\jpeg\JPEGTRAN.EXE -rotate 90 F:\Foto\00Kok\Juho.jpg F:\Foto\00Kok\Juhop.jpg',SW_SHOW);
toimii {ero nimien pituuksissa; JPEGTRAN on 16-bittinen ja siis lyhyet nimet}
Seuraava on käytössä ja toimii oikein. 
   WinExec('g:\dlp4\jpeg\JPEGTRAN.EXE -rotate 90 F:\apu\Pic1.jpg F:\apu\Pic2.jpg',SW_SHOW);

Auto-Pic vs Foto

Tässä vielä linkki AutoPic ohjelmalla tuotetulle kuvasivulle
 ap2html1.htm 
ja tässä AJKn Foto ohjelmalla tuotettuun sivustoon 
 ../vaari/1998-joulu/Joulu-1998-00.htm 

Asko Korpela 981205 (981204) o Asko.Korpela@kolumbus.fi o AJK kotisivu