Entwickler-Ecke

Multimedia / Grafik - Bitmap von unten nach oben ungleiche Opacity


thomas2009 - Do 28.04.11 19:02
Titel: Bitmap von unten nach oben ungleiche Opacity
Hallo,

ich möchte bei Transparenz den Effekt wie von Farbverlauf so zu sagen bekommen
ich möchte die Bitmap oben mehr Transparenz haben als unten
mein Code macht die Bitmap transparent aber gleichmässig

Meine Frage wie kann man eine Maske oder eine schleife erstellen so dass die Bitmap ungleich transparent wird ?

Ich lege meine Demo komplett in Anhang, damit Ihr mich gut verstehen, was ich meine


himitsu - Fr 29.04.11 13:49

Damit hier keiner über fehlende Antworten rumheulen kann:

Bei ScanLine sollte man aufpassen welches Pixel-Format in dem Bitmap vorliegt, denn die Art des Zugriffs ist von dem internen format der Daten abhängig.
- du prüfst nirgends das Format (siehe TBitmap.Pixelformat in der OH)

n ist bei dir quasi sowas wie die Transparenzwert/-faktor
und wenn sich nun die transparenz ändern soll, was mußt du da Ändern?

Bei horizontalem Verlauf muß n also von der horizontalen Positionsvariable innerhalb der Berechnung beeinflußt werden.


Garf - Mo 02.05.11 19:05

user profile iconthomas2009 hat folgendes geschrieben Zum zitierten Posting springen:
ich möchte die Bitmap oben mehr Transparenz haben als unten
mein Code macht die Bitmap transparent aber gleichmässig


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  for h := 0 to bmp1.Height - 1
  do begin
    l1 := bmp1.ScanLine[h];
    l2 := bmp2.ScanLine[h];
    l3 := Image1.Picture.Bitmap.ScanLine[h];
    for w := 0 to bmp1.Width - 1
    do begin
      l3[w].rgbtRed   := trunc(l1[w].rgbtRed   / 100 * (100 - n) + l2[w].rgbtRed   / 100 * n);
      l3[w].rgbtGreen := trunc(l1[w].rgbtGreen / 100 * (100 - n) + l2[w].rgbtGreen / 100 * n);
      l3[w].rgbtBlue  := trunc(l1[w].rgbtBlue  / 100 * (100 - n) + l2[w].rgbtBlue  / 100 * n);
    end;
  end;

Gleichmässig, weil n immer gleich ist.