AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Graphics32: trotz Runterskalierung größere Datei. Was nun???
Thema durchsuchen
Ansicht
Themen-Optionen

Graphics32: trotz Runterskalierung größere Datei. Was nun???

Ein Thema von changlee · begonnen am 21. Aug 2008 · letzter Beitrag vom 23. Aug 2008
 
changlee
(Gast)

n/a Beiträge
 
#1

Graphics32: trotz Runterskalierung größere Datei. Was nun???

  Alt 21. Aug 2008, 17:06
Hallo,

ich Ich lade einen Screenshot in ein normales TBitmap und erhalte nach dem Abspeichern als *.bmp eine Dateigröße von 3 MB.
Wandele ich das TBitmap in ein TPNGObject (mit der freien Bibliothek PNGImage) um, erhalte ich eine Dateigröße von 313 kB.

Das ist mir noch zu groß. Also ging ich noch einen anderen Weg. Hier im Forum fand ich Empfehlungen zu Graphics32 für Skalirung mit sehr wenig Qualitätsverlust.

Ich lade jetzt also den Screenshot gleich in ein TBitmap32 und skaliere das mit dem Faktor 0.8.
Anschließend lade ich das TBitmap32 in ein TBitmap um es schließlich wieder zu png konvertieren zu können. Die png-Datei hat aber nun 354 kB. Also mehr als im unskalierten Fall.

Weiß jemand, woran es liegt und wie ich die Dateigrößen besser reduzieren kann (ohne den drastischen Qualitätsverlust von Stretchdraw zu erhalten)?

Hier ist der Quellcode der beiden Funktionen:
Delphi-Quellcode:

procedure CaptureScreen;
var
  DC: HDC;
  mypng:TPNGObject;
  Bitmap:TBitmap;
begin
  // Capture the Desktop screen
  DC := GetDC(GetDesktopWindow);
  Bitmap := TBitmap.Create;
  mypng:=TPNGOBJect.create;
  try
    Bitmap.Width := GetDeviceCaps(DC, HORZRES);
    Bitmap.Height := GetDeviceCaps(DC, VERTRES);
    BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,DC,0,0,SRCCOPY);
    Bitmap.SaveToFile('normalBitmap.bmp');
    mypng.Assign(Bitmap);
    mypng.SaveToFile('normalPng.png');
  finally
    ReleaseDC(GetDesktopWindow, DC);
    Bitmap.Free;
    mypng.Free;
  end;
end;


procedure CaptureScreen32;
var
  DC: HDC;
  mypng:TPNGObject;
  Bitmap,b,SmallBitmap:TBitmap32;
  bmap:TBitmap;
  resmplr: TKernelResampler;
  scalefactor : double;
  x,y:integer;
begin
  // Capture the Desktop screen
  DC := GetDC(GetDesktopWindow);
  Bitmap := TBitmap32.Create;
  try
    Bitmap.Width := GetDeviceCaps(DC, HORZRES);
    Bitmap.Height := GetDeviceCaps(DC, VERTRES);
    BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,DC,0,0,SRCCOPY);
  finally
    ReleaseDC(GetDesktopWindow, DC);
  end;
  scalefactor := 0.8;
  x := round(Bitmap.Width*scalefactor);
  y := round(Bitmap.Height*scalefactor);
  b := TBitmap32.Create;
  SmallBitmap := TBitmap32.Create;
  bmap:=TBitmap.Create;
  mypng:=TPNGOBJect.create;
  try
    resmplr := TKernelResampler.Create(b);
    resmplr.Kernel := TLanczosKernel.Create;
    SmallBitmap.SetSize(x,y);
    resmplr.Resample(SmallBitmap,rect(0,0,x,y),rect(0,0,x,y),Bitmap,rect(0,0,Bitmap.Width,Bitmap.Height),dmOpaque,nil);

    SmallBitmap.SaveToFile('reduced.bmp');

    bmap.Width := smallbitmap.Width;
    bmap.Height := smallbitmap.Height;
    bmap.Assign(Smallbitmap);

    mypng.Assign(bmap);
    mypng.SaveToFile('reduced.png');
  finally
    b.free;
    Bitmap.free;
    SmallBitmap.free;
    bmap.free;
    mypng.free;
  end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz