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
Antwort Antwort
Schwedenbitter

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

Transparentes Thumbnail

  Alt 19. Sep 2015, 20: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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Transparentes Thumbnail

  Alt 19. Sep 2015, 21:17
Nimm Pngs statt Bitmaps
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Schwedenbitter

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

AW: Transparentes Thumbnail

  Alt 19. Sep 2015, 21:53
Nimm Pngs statt Bitmaps
Soll das gehen? ImageList.Add() unterstützt doch "nur" TBitmap. Wie bekomme ich dann die png's in die Liste?
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Transparentes Thumbnail

  Alt 19. Sep 2015, 21:54
Nimm Pngs statt Bitmaps
Soll das gehen? ImageList.Add() unterstützt doch "nur" TBitmap. Wie bekomme ich dann die png's in die Liste?
Es gibt auch Imagelisten mit png-support.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Schwedenbitter

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

AW: Transparentes Thumbnail

  Alt 20. Sep 2015, 12:10
Nimm Pngs statt Bitmaps
Soll das gehen? ImageList.Add() unterstützt doch "nur" TBitmap. Wie bekomme ich dann die png's in die Liste?
Es gibt auch Imagelisten mit png-support.
Danke erstmal für die Geduld - auch ggf. im Vorraus

Es funktioniert bereits mittels TBitmap; und es klappt auch mit TListView ohne den o.g. Weg, was evtl. am Windows 10 liegt. Ich habe es ausprobiert. Mein Problem liegt nicht in der Transparent als solches. Mein Problem liegt darin, dass die Transparenz sich auf eine besimmte Farbe beziehen muss.
Und genau da liegt mein Problem: bei einem s/w-Bitmap kann ich z.B. rot Benutzen. Aber welche Farbe nehme ich bei einem Farbbild? Wenn dort genau dieses rot vorkommt, dann werden diese Pixel transparent. Das wiederum sieht dann sehr unschön aus.

Also wo ist der Unterschied zum png?

Ich bin immer davon ausgegangen, dass es zwar möglicher Weise einen Unterschied bzgl. des Alpha-Kanals gibt, intern die Bilder aber immer als TBitmap behandelt werden. Mein Ziel ist auch nicht das speichern, sondern die transparente Ausgabe. Auch würde ich ungern irgend welche Dritt-Komponenten dafür installieren müssen.
Alex Winzer
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Transparentes Thumbnail

  Alt 20. Sep 2015, 12:27
Fuchsia ist eigentlich Standard.

gruss
  Mit Zitat antworten Zitat
Schwedenbitter

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

AW: Transparentes Thumbnail

  Alt 20. Feb 2016, 18:54
Ich muss das Thema nochmal aufwärmen:

Danke zunächst erstmal. Ich habe es mit Fuchsia gemacht. Das funktioniert auch ganz gut. Mich stört jetzt allerdings die Darstellung in der TListView. Ich war davon ausgegangen, dass Transparenz auch bedeutet, dass markierte Bilder mit einem weißen statt transparenten Rand angezeigt werden.
Ich habe mal ein Bild angehängt, das zeigt, wie es tatsächlich aussieht und wie ich es gern hätte.

Kann mir da jemand dazu noch einen Tipp geben?
Miniaturansicht angehängter Grafiken
tlistview.png  
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:49 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