Показать сообщение отдельно
  #2  
Старый 25.06.2010, 02:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Отмасштабировать.
Тебе нужна будет функция StretchDraw.
Теперь как рассчитать нужный размер.
При уменьшении картинки в 2 раза ее вес уменьшается примерно в 4 раза (квадрат) (для битмапа, для форматов со сжатием все подругому). Соответсвенно, чтобы из 3 Мб сделать 500 кб (т.е. уменьшение в 6 раз) тебе нвдо обе стороны уменьнить в корень из 6 раз (2,5 примерно).

Код:
procedure ResizeImage(ASrc, ADst : TBitmap; K : Double);
begin
  If (ASrc = Nil) Or (ADst = Nil) Then
    Raise Exception.Create('Source or destination is Nil');

  ADst.Width := Round(ASrc.Width / Sqrt(K));
  ADst.Height := Round(ASrc.Height / Sqrt(K));
  ADst.Canvas.StretchDraw(Rect(0,0,ADst.Width,ADst.Height),ASrc);
end;

Кажется так, писал по памяти, мог чего и напутать.
Ответить с цитированием