Конференция "KOL" » Как масштабировать изображение по размерам окна? [Delphi, Windows]
 
  • ILPU © (02.05.08 14:44) [0]
    Как масштабировать изображение по размерам окна?
    Я использую из koljanfx Strecth.
    procedure MyStrecth;
    var
    NewWidth,
    NewHeight: Integer;
    begin
    if SrcBitmap.Empty then Exit;
    if SrcBitmap.Width > SrcBitmap.Height then
    begin
    NewWidth := Panel1.Width;
    NewHeight := Round(Panel1.Height * SrcBitmap.Height / SrcBitmap.Width);
    end
    else
    begin
    NewHeight := Panel1.Height;
    NewWidth := Round(Panel1.Width * SrcBitmap.Width / SrcBitmap.Height);
    end;

    DesBitmap.Width:=NewWidth;
    DesBitmap.Height:=NewHeight;
    Strecth(SrcBitmap,DesBitmap,BellFilter,1.5);
    end;
    procedure TForm1.Panel1Paint(Sender: PControl; DC: HDC);
    begin
    DesBitmap.Draw(DC,0,0);
    end;
    procedure TForm1.KOLForm1Resize(Sender: PObj);
    begin
    Strecth;
    end;
    Возникает тормазнутось когда меняешь размеры окна
    Проблема в  KOLForm1Resize.
    Как быть?
  • Compiler © (02.05.08 22:51) [1]
    > Проблема в  KOLForm1Resize.

    Никаких проблем

    var
     BMP:PBitmap;
    procedure TForm1.KOLFormFormCreate(Sender: PObj);
    begin
    BMP:=NewBitmap(0,0);
    BMP.LoadFromFile('Bunny.bmp');
    PaintBox1.Transparent:=True;
    ...

    procedure TForm1.PaintBox1Paint(Sender: PControl; DC: HDC);
    begin
     if (Assigned(bmp) and (not bmp.Empty)) then
        BMP.StretchDraw(form1.form.canvas.Handle,MakeRect(0,0,Paintbox1.Width,Paintbox1. Height));
    end;


  • ILPU © (03.05.08 05:51) [2]
    Когда большие фотки, качество страдает!
  • ILPU © (03.05.08 06:07) [3]
    Если так то качество нормальное, но опять тормазнутость:
    procedure MyStrech(DC:HDC);
    var B: PBitmap;
    begin
     B:=NewBitmap(Paintbox1.Width,Paintbox1.Height);
     Strecth(SrcBitmap,B,ResampleFilters[5].Filter,ResampleFilters[5].Width);
     DesBitmap.Assign(B);
     B.Free;
     DesBitmap.Draw(DC,0,0);
    end;
    procedure TForm1.PaintBox1Paint(Sender: PControl; DC: HDC);
    begin
    if (Assigned(DesBitmap) and (not DesBitmap.Empty)) then
    MyStrech(DC);
    end;
  • ILPU © (03.05.08 08:19) [4]
    В книге по KOL вычитал используем SetStretchBltMode(DC,halftone);
    И все ОК.
    А есть альтернатива?
    И как реализовать Zoom?
  • Vladimir Kladov (03.05.08 08:26) [5]
    Есть ещё OpenGL.
 
Конференция "KOL" » Как масштабировать изображение по размерам окна? [Delphi, Windows]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]