Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Масштабирование изображения со свойством Streched


Автор: Chydik 17.10.2012, 11:50
Пытаюсь изменить рамер изображения через трекбар
Код

procedure TForm1.trckbr1Change(Sender: TObject);
var
  i: integer;
begin
   imgBefore.Height :=  ImgY + (trckbr1.Position);
   imgBefore.Width  :=  ImgX + (trckbr1.Position);
   imgBefore.Canvas.StretchDraw(
      Rect(imgBefore.Left,imgBefore.Top,ImgX + (trckbr1.Position),ImgY + (trckbr1.Position)), OrignBitmap);
end;

//OrignBitmap - Битмап исходного изображения
//В свойствах imgBefore(TImage) стоит тру на Streched и Proportional 


Работает все замечательно при уменьшении изображения trckbr1.Position <= 0, но при увеличении размер изображения меняется и изображение увеличивается только при этом идет обрезка справа и снизу.

Из-за чего это может быть?

Реальный размер:
http://s2.ipicture.ru/
Уменьшение размера:
http://s2.ipicture.ru/
Увеличение размера:
http://s1.ipicture.ru/



Автор: Illusion Dolphin 17.10.2012, 21:45
Цитата

function TImage.GetCanvas: TCanvas;
var
  Bitmap: TBitmap;
begin
  if Picture.Graphic = nil then
  begin
    Bitmap := TBitmap.Create;
    try
      Bitmap.Width := Width;
      Bitmap.Height := Height;
      Picture.Graphic := Bitmap;
    finally
      Bitmap.Free;
    end;
  end;
  if Picture.Graphic is TBitmap then
    Result := TBitmap(Picture.Graphic).Canvas
  else
    raise EInvalidOperation.Create(SImageCanvasNeedsBitmap);
end;


Отсюда следует что Вы увеличиваете размер компонента, но рисуете на внутреннем объекте TBitmap, который остаётся прежних размеров. 

Автор: Chydik 18.10.2012, 09:38
Illusion Dolphin Огромное спасибо изменяю размеры битмапа имеджа и все превосходно срабатывает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)