AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Deckkraft von Bitmap unregelemässig erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Deckkraft von Bitmap unregelemässig erstellen

Ein Thema von thomas2009 · begonnen am 18. Apr 2011 · letzter Beitrag vom 21. Apr 2011
Thema geschlossen
Seite 1 von 2  1 2      
thomas2009
(Gast)

n/a Beiträge
 
#1

Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 12:34
Hi
ist es Leute möglich, die Deckkraft (Opacity) von Bitmap unregelmässig zu erstellen
Im Anhang ist die Deckkraft regelmässig
Ich möchte aber auf eine Seite mehr Transparent und die Seite gegenüber ganz wenig
Miniaturansicht angehängter Grafiken
opacity_irregular.jpg  
 
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 12:35
Dann verwende eine Alpha-Maske
Markus Kinzler
 
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 12:49
Das mit der Alpha-Maske funktioniert so:

Bei einem Standard-Bitmap mit 24 Bit hast du für jeden Pixel jeweils ein (unsigned) Byte (3 * 1 Byte = 3 * 8 Bit = 24 Bit) für die Kanäle Red, Green und Blue zur Verfügung und kannst damit jeweils die Werte von 0 bis 255 speichern.
Bei einem 32-Bit-Bitmap kommt noch ein vierter Kanal hinzu, der sogenannte Alpha-Kanal. In ihm kann pro Pixel auch noch seine Sichtbarkeit angegeben werden, wobei 255 für voll sichtbar und 0 für unsichtbar steht.
Wenn du also einen Verlauf der Transparenz haben willst, dann sollte dein Bitmap ein 32-Bit-Bitmap sein und die entsprechenden Werte für die Transparenz im Alpha-Kanal haben.
Dann musst du dir überlegen, wie du das Bitmap ausgibst. Wenn du es auf einer Canvas bzw. einem anderen Bitmap ausgeben willst, dann kannst du dein Bild Pixel für Pixel durchgehen und (entsprechend dem jeweiligen Alpha-Wert) jeden Pixel auf deinen Hintergrund blenden. Wenn deine Form selbst halbtransparent sein soll (wie es der Screenshot vermuten lässt), dann kannst du mit Hier im Forum suchenUpdateLayeredWindow arbeiten.

mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
 
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 13:08
Oder gleich mit PNG's arbeiten die semitransparenz von Haus aus unterstützen.
Windows Vista - Eine neue Erfahrung in Fehlern.
 
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 13:27
Wobei man da wohl eine Fremd-Library für die PNG-Unterstützung verwenden müsste (oder bieten die neueren Delphi-Editionen eine entsprechende Unterstützung von Haus aus?).
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
 
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#6

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 13:30
Ja, die neueren Delphis können PNG.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
 
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 18. Apr 2011, 13:30
Das bekannte PNGDelphi wurde von Embaracadero gekauft und ist jetzt Bestandteil der VCL.
Windows Vista - Eine neue Erfahrung in Fehlern.
 
thomas2009
(Gast)

n/a Beiträge
 
#8

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 21. Apr 2011, 12:41
Das bekannte PNGDelphi wurde von Embaracadero gekauft und ist jetzt Bestandteil der VCL.
Und wie geht es damit ?
--------------------------------

Dann verwende eine Alpha-Maske
Ich weiß nicht, wie ich die Maske programiere
Ich erstelle die Opacity so :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const TransparentGrad = 0.5;
VAR oldColor, aColor: TColor;
    x,y: Integer;
    tmpColor1,
    tmpColor2: TColor;
begin
  Image3.Picture.Assign(Image2.Picture);
  Image3.AutoSize := True;

  for x := 0 to Image1.Picture.Width do
    for y := 0 to Image1.Picture.Height do begin
      oldColor := Image1.Canvas.Pixels[x,y];
      aColor := Image2.Canvas.Pixels[x,y];
      Image3.Canvas.Pixels[x,y] := RGB(Trunc(Max(0,GetRValue(oldColor) - TransparentGrad * GetRValue(aColor))),
                                       Trunc(Max(0,GetGValue(oldColor) - TransparentGrad * GetGValue(aColor))),
                                       Trunc(Max(0,GetBValue(oldColor) - TransparentGrad * GetBValue(aColor))));
    end;
end;
Kann jemand mir weiter helfen?

Geändert von thomas2009 (21. Apr 2011 um 12:46 Uhr)
 
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 21. Apr 2011, 13:37
Das bekannte PNGDelphi wurde von Embaracadero gekauft und ist jetzt Bestandteil der VCL.
Und wie geht es damit ?
TPngImage!?
Delphi programming is awesome.
 
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Deckkraft von Bitmap unregelemässig erstellen

  Alt 21. Apr 2011, 13:58
Na, überleg doch mal, was du an dieser Stelle machst:

Ich erstelle die Opacity so :
Delphi-Quellcode:
      Image3.Canvas.Pixels[x,y] := RGB(Trunc(Max(0,GetRValue(oldColor) - TransparentGrad * GetRValue(aColor))),
                                       Trunc(Max(0,GetGValue(oldColor) - TransparentGrad * GetGValue(aColor))),
                                       Trunc(Max(0,GetBValue(oldColor) - TransparentGrad * GetBValue(aColor))));
Du hast halt jetzt nicht mehr einen globalen Wert für "TransparentGrad", sondern dieser ist pro Pixel verschieden. Den Wert dafür erhältst du aus dem Alpha-Kanal deiner Bitmap.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
 
Thema geschlossen
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 17:52 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