AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thumbnail erstellen mit bicubic verfahren.
Thema durchsuchen
Ansicht
Themen-Optionen

Thumbnail erstellen mit bicubic verfahren.

Ein Thema von shifter · begonnen am 29. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#1

Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 07:50
Hallo,

ich versuche seit längeren Zeit eine möglichkeit zu finden Thumb's zu erstellen. Wenn ich auf den normalen weg Bilder verkleinere bekommt man zimlich schlechte qualität.
Wenn ich Bilder mit dem Photoshop verkleinere gibts da ne möglichkeit das Bild neu zu berechnen mit Bikubisch diese verfahren liefert die beste qualität.
Unter PHP kann man ohne weiteres die GD Library nutzen damit ist man auch gut bedient.

Gibt's ne möglichkeit mit Delphi sowas zu realizieren ? Na gut die möglichkeit gibt's mit sicherheit - aber wie ?


Mfg
Seba
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#2

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 08:07
In der JCL gibt es die unit jclgraphics.pas, dort gibt es eine Funktion Stretch, die verschiedene Algorithmen erlaubt. Normalerweise ist schon das schnellste Verfahren immernoch besser als StretchDraw aus der VCL.

Download hier

Gruß, teebee

EDIT: Link hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 09:01
Oder man verwendet die Graphics32 Bibliothek.
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 10:05
Ich habe vor einiger Zeit mal getestet, und festgestellt, dass das Verkleinern von sehr großen Bildern mit der Graphics32 viel langsamer war als mit der jclgraphics. Ob das mit der aktuellen Version immernoch so ist, weiß ich allerdings nicht.

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 10:17
Das kann natürlich sein, nur die Frage ist, ob da relevant ist.
Mir persönlich ist die JVCL (JCL) einfach zu überladen, und hab die deshalb nicht installiert.
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 14:38
Erstman möchte ich mich bedanken bei euch für die Antworten.
Ich werde natürlich alle möglichkeiten mir sofort angucken,
in prinzip ist mir die Qualität wichtiger als geschwindigkeit,
wobei mann muss es auswiegen .

Zitat von Jelly:
Oder man verwendet die Graphics32 Bibliothek.
Kannst Du mir Tip geben wie sich es Anwendet ?



Gruss
seba
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 14:54
Zitat von shifter:
Kannst Du mir Tip geben wie sich es Anwendet ?
Hier ein schneller, unsauberer, unkommentierter, funktionierender Code
Ist dazu gedacht, vom aktuellen Fenster ein Screenshot zu schiessen, und diesen sowohl in Originalgrösse als auch als Thumbnail zu speichern.

Auf dem Form brauchts ein TImage32, Name: img... Die Breite des img wird genutzt für die Thumbnailgrösse, die Höhe wird skaliert.


Delphi-Quellcode:
procedure TForm1.MakeScreenShot;
var
  B: TBitmap;
  B2 : TBitMap ;
  S: string;
  H : THandle ;
  R, RClient : TRect ;
  Thumb : TBitmap32 ;
  JPeg, ThumbJpeg : TJPEGImage ;
  FN : string ;
  Dir, Root, BMP, tnBMP, JPG, tnJPG : string ;

  function AnyFileExists (Root : string) : boolean ;
  begin
       if FileExists (Root + '.jpg') or
          FileExists (Root + '.bmp')
       then Result := true
       else Result := false ;
  end ;

  function Makefilename (Orig : string) : string ;
  var
   F : string ;
   T : string ;
   i, p : integer ;
  begin
       F := includetrailingbackslash (extractFilePath (application.exename)) ;
       F := F + 'ScreenShots\' ;
       forcedirectories (F) ;
       p := pos ('%D',uppercase(Orig)) ;
       if p <> 0 then begin
          Delete (Orig,p,2) ;
          Insert ('%.2d',Orig,p) ;
          F := F + Orig ;
          i := 1 ;
          Result := Format (F,[i]) ;
          while AnyFileExists (Result) do begin
             i := i + 1 ;
             Result := Format (F,[i]) ;
          end ;
       end else begin
          Result := F + Orig ;
       end ;
  end ;

  procedure ResizeImage(Dst, Src: TBitmap32; const NewWidth: integer);
  var
  Percent : single ;
  begin
       Percent := NewWidth / Src.Width ;
       if Percent = 1 then Dst.Assign(Src)
       else begin
           with Dst do begin
              SetSize(Max(Round(Src.Width * Percent), 1), Max(Round(Src.Height * Percent), 1));
             Draw(Rect(0, 0, Width, Height), Rect(0, 0, Src.Width, Src.Height),
             Src);
           end;
       end;
  end;

begin
  H := GetForeGroundWindow ;
  //H := GetActiveWindow ;

  if H <> 0 then begin
      GetWindowRect (H,R) ;

      FN := MakeFileName (txtFN.text) ;
      Root := ExtractFilename (FN) ;
      Dir := IncludeTrailingBackSlash (ExtractFilePath(FN)) ;
      Root := copy (Root,1,length(Root)-length(ExtractFileExt(Root))) ;
      BMP := FN + '.bmp' ;
      JPG := FN + '.jpg' ;
      tnBMP := Dir + 'tn_' + Root + '.bmp' ;
      tnJPG := Dir + 'tn_' + Root + '.jpg' ;

      { Screencapture in Image1 zeichnen }
      B := Image1.Picture.Bitmap ;
      B.Width := R.Right-R.Left ;
      B.Height := R.Bottom-R.Top ;
      BitBlt(B.Canvas.handle, 0,0 , B.Width, B.Height, GetDc(0), R.left, R.Top, SRCCOPY);

      { Graphics32 nutzen zum Thumbnail erstellen aus Image1 }
      img.Bitmap.Assign(Image1.Picture);
      img.Bitmap.resampler := TDraftResampler.Create (img.Bitmap) ;
      img.ScaleMode := smResize ;

      { Vollbild speichern }
      if chkBMP.Checked then image1.Picture.SaveToFile(BMP);
      JPeg := TJPegImage.create ;
      JPeg.CompressionQuality := StrToInt (txtQuality.text) ;
      JPeg.Assign (B) ;
      if chkJPG.checked then JPeg.SaveToFile (JPG) ;
      JPeg.free ;

      { Thumbnail speichern }
      Thumb := TBitMap32.Create ;
      ResizeImage (Thumb,Img.Bitmap,Img.Width) ;
      if chkBMP.Checked then Thumb.SaveToFile(tnBMP);
      B2 := TBitmap.create ;
      JPeg := TJPegImage.create ;
      B2.Assign(Thumb);
      JPeg.CompressionQuality := StrToInt (txtQuality.text) ; // 0-100
      JPeg.Assign (B2) ;
      if chkJPG.checked then JPeg.SaveToFile (tnJPG) ;
      JPeg.free ;
      B2.free ;
  end ;
end ;
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 15:21
Hi,

DANKE erstmal für den SourceCode,
ich finde hier aber nicht wo man den Algorithmen einstellen kann.

Macht er das Standart messig mit Bikubisch ?

gruss
seba
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 16:37
Hi,

ich habe mir den Graphics32 etwas zu brust genommen,

das ist der hammer schlecht hin !

Ich bedanke mich bei Euch allen für Eure hilfe,
und bis demnächst.

Grüsse aus Wuppertal.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Thumbnail erstellen mit bicubic verfahren.

  Alt 29. Aug 2006, 16:46
Zitat von shifter:
Macht er das Standart messig mit Bikubisch ?
Keine Ahnung ?
Bei den älteren Versionen von der Lib konnte man das recht leicht einstellen, über
img.Bitmap.StretchFilter := sfLinear ; Bei der letzten Version jedoch läuft das jetzt über
img.Bitmap.resampler := TDraftResampler.Create (img.Bitmap) ; Was es alles an Resampler gibt, weiss ich nicht... Würd mich aber auch freuen, wenn mir da einer Näheres zu erzählen könnt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz