Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

scale JPEG как в PhotoShop


arreke ©   (2008-05-25 12:36:00) 

Такая процедура не даёт нужного результата,


procedure TForm1.Button1Click(Sender: TObject);
var
 bmp: TBItmap;
 jpg: TJpegImage;
 scale: Double;
begin
 if opendialog1.execute then begin
   jpg:= TJpegImage.Create;
   try
     jpg.Loadfromfile( opendialog1.filename );
     if jpg.Height > jpg.Width then
       scale := 50 / jpg.Height
     else
       scale := 50 / jpg.Width;
       bmp:= Tbitmap.Create;
       try
         {Create thumbnail bitmap, keep pictures aspect ratio}
         bmp.Width := Round( jpg.Width * scale );
         bmp.Height:= Round( jpg.Height * scale );
         bmp.Canvas.StretchDraw( bmp.Canvas.Cliprect, jpg );
         {Draw thumbnail as control}
         Self.Canvas.Draw( 100, 10, bmp );
         {Convert back to JPEG and save to file}
         jpg.Assign( bmp );
         jpg.SaveToFile(ChangeFileext( opendialog1.filename, '_thumb.JPG' ));
       finally
         bmp.free;
       end;
     finally
       jpg.free;
   end;
end;


Рисунок уменьшается, но размер больше и качество намного хуже чем "Save for web" в Photoshop.
Как это исправить? Очень на вас надеюсь, вы уже ни раз меня выручали, надеюсь на вашу помошь и в этот раз.


arreke   (2008-05-25 17:13:00) [1]

Спасибо, то что нужно.
MegaRespect.


Умище   (2008-05-25 15:44:00) [2]

procedure StretchJPG(const FilePathSrc,FilePathDest: String; aW,aH: Integer);
var
  Src, Dest: TBitmap;
  j: TJPEGImage;
  Degree: Double;
begin
  Src:= TBitmap.Create;
  Dest:= TBitmap.Create;
  j:= TJPEGImage.Create;

  try
    j.LoadFromFile(FilePathSrc);
    Src.Assign(j);
    Dest.Assign(Src);
    if (Dest.Width<=aW) and (Dest.Height<=aH) then Exit;
    Degree := Src.Height/aH;
    if Trunc(Src.Width/Degree)>aW then Degree := Src.Width/aW;
 
    Dest.Width:= Trunc(Src.Width/Degree);
    Dest.Height:= Trunc(Src.Height/Degree);
 
    SetStretchBltMode(Dest.Canvas.Handle, HALFTONE);
    StretchBlt(Dest.Canvas.Handle, 0, 0, Dest.Width, Dest.Height,
               Src.Canvas.Handle, 0, 0,  Src.Width, Src.Height, SRCCOPY);
    j.Assign(Dest);
    j.SaveToFile(FilePathDest);
  finally
    Src.Free;
    Dest.Free;
    j.Free;
  end;
end;


TIF   (2008-05-25 15:30:00) [3]

Удалено модератором


Наверх

Титульная страница Поиск, карта сайта Написать письмо