Цитата:
	
	
		| 
			
				 Сообщение от Brute Force 
				И еще, нельзя ли как-то ограничить область, в которой отрисовка происходит, а то если масштаб увеличивать, то картинка во всю форму рисуется и под остальные компоненты залазит. Я пытался TImage  в ScrollBox поместить, но у него канвы нету ( 
А мне надо, чтобы TImage был ограниченных и фиксированных размеров, а уменьшалась и увеличивалась в нем сама картинка. 
			
		 | 
	
	
 
тогда тебе разбираться с TPaintBox (кажется так). У него есть эвент - OnPaint - вызывается при перерисовке самого контрола. 
1. Создаешь в памяти битмар (FBitmap : TBitmap) оригинального размера (т.е. просто загрузка из файла).
2. На форму кидаешь TScrollBox и настраиваешь его размеры (это если надо даже в случае, когда картинка больше видимой области, иметь возможность прокрутить ее и увидеть любую часть).
3. На TScrollBox кидаешь TPaintBox.
4. Заводишь переменную - коэф. увеличения. Тип - в зависимости от потребностей. Если нужно только увеличение, то можно обойтись Integer, если надо и уменьшение, то тип Double. В примере - первый вариант (FScale : Integer).
4. В событии OnPaint пишешь код отрисовки вида:
	Код:
	// Вариант без TScrollBox
var
  ViewH, ViewH : Intger;
  R : TRect;
begin
  // вычисляем размеры отображения. Если FScale : Double, то закрыть в Round
  ViewH := FBitmap.Height * FScale;
  ViewW := FBitmap/Width * FScale;
  // Вычисляем координаты области отрисовки
  R := TRect(Round((PaintBox.Width - ViewW)/2), // Left
                  Round((PaintBox.Height - ViewH)/2), // Top
                  Round((PaintBox.Width - ViewW)/2) + ViewW, // Right
                  Round((PaintBox.Height - ViewH)/2) + ViewH); // Bottom
  // Рисуем
  PaintBox.Canvas.StretchDraw(R,FBitmap);
end; 
 
Вариант с TScrollBox по сути гораздо проще.
При изменении масштаба надо просто установить размеры TPaintBox в вычисленные аналогично предыдущему варианту, а в отрисовке R создать по координатам PaintBox'а (R := Rect(0,0,PaintBox.Width,PaintBox.Height) и отрисовать FBitmap (точно также, как и выше).