Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: GR32 Bilder erhellen/verdunkeln?

  Alt 14. Jul 2006, 14:36
Klar, verkleinern kann man es, dafür gibts extra Filter eingebaut bei GR32, die natürlcih auch mit den einzelnen Pixeln arbeiten^^

Ein Bild besteht nur aus "einzelnen Pixeln", und beim Skalieren werden die auch nur miteinander verrechnet.

Du müsstest dir eben einen Schärf-Algo suchen, obwohl ich bezweifle, dass das bei Fotos notwending ist.

Delphi-Quellcode:
var
  bklein, bgros: TBitmap32;

bklein.stretchfilter := sflanczos;
bklein.width := kleiner_wert;
bklein.height := anderer_kleiner_wert_evtl_propertional;
bklein.Draw(rect(),bgroß,rect());
Hier mla ne Methode Funktion zum Verkleinern, einmal für Tbitmap32 und einmal für Tbitmap, wobei die qualität bei letzterem natürlich eher schlecht ist:

Delphi-Quellcode:
{-----------------------------------------------------------------------------
  Function:  ResizeBitmap32
  Author:    luke
  Date:      11-Jun-2006
  Arguments: src: TBitmap32; dst: TPoint
  Result:    TBitmap32

  stretches a TBitmap32, keeping proportions
-----------------------------------------------------------------------------}

function ResizeBitmap32(src: TBitmap32; dst: TPoint): TBitmap32;
var scalex,scaley,scale: single;
    sf: TStretchFilter;
begin
  scalex := dst.X / src.Width;
  scaley := dst.Y / src.Height;


  scale := Min(scalex, scaley);

  if scale > 1 then
    sf := sfMitchell //magnifying filter
  else
    sf := sfLanczos;


  Result := TBitmap32.Create;
  Result.Width := Ceil(src.Width * scale);
  Result.Height := Ceil(src.Height * scale);

  Result.Clear(clWhite32);

  Result.StretchFilter := sf;
  Result.Draw(rect(0,0,Result.Width,Result.Height), //over the whole bitmap
              rect(0,0,src.Width,src.Height), //the whole src
              src);
end;

function ResizeBitmap(src: TBitmap; dst: TPoint): TBitmap;
var scalex,scaley,scale: single;
begin
  scalex := dst.X / src.Width;
  scaley := dst.Y / src.Height;

  scale := Min(scalex, scaley);

  Result := TBitmap.Create;
  Result.Width := Ceil(src.Width * scale);
  Result.Height := Ceil(src.Height * scale);

  Result.Canvas.StretchDraw(rect(0,0,Result.Width,Result.Height),src);
end;
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat