[Delphi] Canvas , rozmiar, ostrość ??

0

Dzięń dobry, nie znam się dobrze na operacjiach na Canvasach, a zaobserwowałem
pewnego rodzaju wadliwe działanie, i chciał bym wiedzieć dlaczego tak się dzieje
i co zrobić by było dobrze.

A teraz postaram się przedstawić problem:

To jest zdjęcie yoda.jpg

To jest to samo zdjęcie zmniejszone do wielkości 400x300 przy użyciu ACDSee

Natomiast to jest zdjęcie zmniejszone programowo

w następujący sposób:

var
Pic : TPicture;
Bmp : TBitmap;
begin
Pic := TPicture.Create;
Pic.LoadFromFile('yoda.jpg');
Bmp := TBitmap.Create;
Bmp.Width := Pic.Width;
Bmp.Height := Pic.Height;
Bmp.Canvas.Draw(0,0, Pic.Graphic);
Pic.Destroy;
Canvas.CopyRect(Rect(0,0, 400, 300), Bmp.Canvas, Rect(0,0, Bmp.Width, Bmp.Height));
Bmp.Destroy;
end;

Chyba widać różnice, no i co teraz mam zrobić żeby mi program działał jak w ACDSee ?

0

var
Pic : TPicture;
Bmp : TBitmap;
begin
Pic := TPicture.Create;
Pic.LoadFromFile('yoda.jpg');
Bmp := TBitmap.Create;
Bmp.Width := Pic.Width;
Bmp.Height := Pic.Height;
Bmp.Canvas.Draw(0,0, Pic.Graphic);
Pic.Destroy;
Canvas.StrechDraw((Rect(0,0, 400, 300), Bmp); Bmp.Destroy;
end;

Lepiej chyba użyć StrechDraw. A jeżeli to daje zbyt słabą jakość, to wśród funkcji WinAPI znajduje się chyba kilka różnych do rozciągania i zwężania wykorzystujących różne algorytmy.
Jeżeli chcesz mieć takie same efekty jak w ACDSee to sprawdź jakiego algorytmu używa do zmiany rozmiaru (z tego co pamiętam to jest możliwość ustawienia kilku różnych).

0

Lepiej chyba użyć StrechDraw. A jeżeli to daje zbyt słabą jakość, to wśród funkcji WinAPI znajduje się chyba kilka różnych do rozciągania i zwężania wykorzystujących różne algorytmy.
Jeżeli chcesz mieć takie same efekty jak w ACDSee to sprawdź jakiego algorytmu używa do zmiany rozmiaru (z tego co pamiętam to jest możliwość ustawienia kilku różnych).

dzięki Dryobates [hurra]
StrechDraw mnie zadowala :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1