AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi nach StretchBlt schwarzer Hintergrund
Thema durchsuchen
Ansicht
Themen-Optionen

nach StretchBlt schwarzer Hintergrund

Ein Thema von Helmi · begonnen am 21. Feb 2015 · letzter Beitrag vom 26. Feb 2015
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: nach StretchBlt schwarzer Hintergrund

  Alt 25. Feb 2015, 22:52
Und wie stellt man das an?
Du siehst vorher nach (wie oben von mir beschrieben), ob das Icon teiltransparente Pixel hat (wie z.B. das Standard-Delphi-Icon), skalierst die Grafik mit Deiner Funktion und kontrollierst das Ergebnis, indem Du die 32-Bit-Ergebnis-Bitmap als BMP-Datei speicherst und in einen Editor lädst und dort schaust, ob die Teiltransparenz erhalten geblieben ist.

Mit dem bloßen Auge kannst Du es der Grafik ja nicht ansehen, da kann z.B. auf einem weißen Hintergrund ein teiltransparentes Schwarz ja wie ein voll sichtbares Grau aussehen. Du musst dann halt kontrollieren, ob einige Pixel im Alpha-Bit einen Wert zwischen 1 und 254 haben (0= Pixel ist unsichtbar bzw. voll transparent, 255= Pixel ist voll sichtbar bzw. hat 100% Deckkraft).
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.821 Beiträge
 
Delphi 12 Athens
 
#2

AW: nach StretchBlt schwarzer Hintergrund

  Alt 26. Feb 2015, 12:16
Ich skaliere nur noch mit dem http://docwiki.embarcadero.com/VCL/X...hics.TWICImage.

Beispiel einer proportionalen Skalierung:
Delphi-Quellcode:
procedure ResizeImage(aWICImage: TWICImage; NewWidth:Integer);
var
  scale: IWICBitmapScaler;
  wicBitmap: IWICBitmap;
  newHeight:Integer;
  faktor:Double;
begin
  if Assigned(aWICImage) then
  begin
    faktor := NewWidth / aWICImage.Width;
    newHeight := Round(aWICImage.Height * faktor);

    aWICImage.ImagingFactory.CreateBitmapScaler(scale);
    scale.Initialize(aWICImage.Handle, NewWidth, NewHeight, WICBitmapInterpolationModeFant);
    aWICImage.ImagingFactory.CreateBitmapFromSourceRect(scale, 0,0,NewWidth, NewHeight, wicBitmap);
    if Assigned(wicBitmap) then
      aWICImage.Handle := wicBitmap;
  end;
end;
Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#3

AW: nach StretchBlt schwarzer Hintergrund

  Alt 26. Feb 2015, 13:45
Gut regergiert, Sherlock!

eine interessante Funktion

Ich hab das mal für normale Bitmaps (testweise) umgestrickt:

Delphi-Quellcode:
procedure ResizeImage(Bitmap: TBitmap; NewWidth:Integer);
var
  WICImage : TWICImage;
  WICBitmap: IWICBitmap;
  scale : IWICBitmapScaler;
  newHeight: Integer;
  faktor : Double;

begin
  If not Assigned(Bitmap) then
    exit;

  WICImage := TWICImage.Create;

  WICImage.Assign(Bitmap);

  try
    faktor := NewWidth / WICImage.Width;
    newHeight := round(WICImage.Height * faktor);

    WICImage.ImagingFactory.CreateBitmapScaler(scale);

    scale.Initialize(WICImage.Handle, NewWidth, NewHeight, WICBitmapInterpolationModeFant);

    WICImage.ImagingFactory.CreateBitmapFromSourceRect(scale, 0,0,NewWidth, NewHeight, WICBitmap);

    If Assigned(WICBitmap) then
      WICImage.Handle := WICBitmap;

    Bitmap.Assign(WICImage);
  finally
// WICImage.Free;
  end;
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (26. Feb 2015 um 14:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#4

AW: nach StretchBlt schwarzer Hintergrund

  Alt 26. Feb 2015, 22:34
Stimmt, das geht auch mit der Windows Imaging Component (WIC), die Transparenz bleibt da erhalten.

Kleiner Wermutstropfen ist dabei, dass WIC unter Windows erst ab Vista standardmäßig im System dabei ist. Für XP muss der Anwender Deines Programms das auf dem System evtl. nachinstallieren (allerdings ab Servicepack xp3 ist es wohl schon dabei).

Aber allmählich ist die Unterstützung für XP vielleicht sowieso nicht mehr so wichtig...

Geändert von Harry Stahl (26. Feb 2015 um 22:53 Uhr)
  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 08:08 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