AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Transparentes Thumbnail

Ein Thema von Schwedenbitter · begonnen am 19. Sep 2015 · letzter Beitrag vom 20. Feb 2016
 
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Transparentes Thumbnail

  Alt 19. Sep 2015, 19:27
Hallo,

obwohl ich mir unter anderem die Themen [1], [2] durchgelesen habe, finde ich keine Lösung für mein Problem:

Ich kann anhand der Beispielcodes ein ein-/mehrfarbiges Bitmap transparent machen und auch darstellen. Ich möchte aber mit meinem Programm Thumbnails erstellen, die später als LargeImages in eine TListView gemalt werden. Ich hoffe, dass das dann auch so klappt
Das Problem dabei ist, dass ich die Farben dieser Bilder nicht kenne. Es besteht also die Gefahr, dass ich eine Farbe transparent setze, die in diesem Bild schon existiert. Also dachte ich mir, ich benutze clNone. Damit klappt es aber leider nicht. Unter den Bildern sind auch schwarz/weiß Bilder, so dass diese beiden Farben leider auch ausfallen.

Mein Code sieht so aus:
Delphi-Quellcode:
// Erstellt ein quadratisches Thumbnail ----------------------------------------
// Bei angegebener Farbe wird diese Farbe der Hintergrund. Ohne Farbangabe soll
// der Hintergrund transparent werden.
Procedure MakeThumb(Const Bitmap, Thumbnail: TBitmap; MaxSize: Integer;
   Const BackColor: TColor = clNone);
Var
   NH, NW         : Integer;
   pt               : TPoint;
Begin
   Thumbnail.Assign(nil);               // ggf. altes Bild löschen
   Thumbnail.Width:= MaxSize;         // Höhe einstellen
   Thumbnail.Height:= MaxSize;         // Breite einstellen
   Thumbnail.PixelFormat:= pf24bit;         // http://www.delphipraxis.net/1144235-post4.html
   If (BackColor = clNone) Then            // => Hintergrund transparent
   Begin
      Thumbnail.Transparent:= True;      // Transparenz setzen
      Thumbnail.TransparentMode:= tmFixed;      // Zuweisung von Hand
      Thumbnail.TransparentColor:= clRed;      // die Farbe wird transparent
   End;
   Thumbnail.Canvas.Brush.Color:= clRed;      // Hintergrundfarbe setzen
   Thumbnail.Canvas.FillRect(Thumbnail.Canvas.ClipRect);

   GetBrushOrgEx(Thumbnail.Canvas.Handle, pt);
   SetStretchBltMode(Thumbnail.Canvas.Handle, HALFTONE);
   SetBrushOrgEx(Thumbnail.Canvas.Handle, pt.x, pt.y, @pt);

   If (Bitmap.Width < Bitmap.Height) Then            // Hochformat
   Begin
      NH:= MaxSize;                                 // Höhe = Maximalwert
      NW:= Bitmap.Width * NH Div Bitmap.Height;      // Breite berechnen
      StretchBlt(                                    // Bitmap verkleinert kopieren
         Thumbnail.Canvas.Handle,                  // Ziel-Bitmap
         ((MaxSize - NW) Div 2), 0, NW, NH,         // ggf. nach innen rücken
         Bitmap.Canvas.Handle,                     // Quell-Bitmap
         0, 0, Bitmap.Width, Bitmap.Height,         // komplettes Bild kopieren
         SRCCOPY);                                 // Kopiermodus
   End
   Else
   Begin
      NW:= MaxSize;                                 // Breite = Maximalwert
      NH:= Bitmap.Height * NW Div Bitmap.Width;      // Höhe berechnen
      StretchBlt(                                    // Bitmap verkleinert kopieren
         Thumbnail.Canvas.Handle,                  // Ziel-Bitmap
         0, ((MaxSize - NH) Div 2), NW, NH,         // ggf. nach unten rücken
         Bitmap.Canvas.Handle,                     // Quell-Bitmap
         0, 0, Bitmap.Width, Bitmap.Height,         // komplettes Bild kopieren
         SRCCOPY);                                 // Kopiermodus
   End;
End;
Welchen Farbwert kann/sollte man nutzen, um dieses Problem zu lösen?
Oder wie löst man dieses Problem anders?
Alex Winzer
  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 01:20 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