Autor Beitrag
thomas2009
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 28.04.11 19:02 
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
Einloggen, um Attachments anzusehen!
himitsu
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 40



BeitragVerfasst: 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.

_________________
warum einfach wenn's auch kompliziert geht
schreib wie du willst und halt dich an keine standards
Garf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 54
Erhaltene Danke: 2


D3Prof, D7PE, TDE
BeitragVerfasst: 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

ausblenden 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.
Einloggen, um Attachments anzusehen!