Seite 1 von 1

Fragen zum AlphaBlending

Verfasst: 28.10.2020 18:11
von Mijikai
Ich benutze momentan das unten stehende Makro fürs AlphaBlending.

Wie könnte ich noch einen zusätzlichen Alphawert integrieren um die gesamte Tranzparents zu beeinflussen?

Auch noch nicht ganz klar ist mir -> was ich mit dem Alpha Kanal der ersten Farbe? :freak:
Einfach so lassen ? (Will später evtl. mehrfach Pixel kopieren - also auch c1 als Quelle verwenden.)

Code:

Code: Alles auswählen

EnableExplicit

Structure COLOR
  StructureUnion
    rgba.a[4]
    code.l
  EndStructureUnion
EndStructure

Macro mBlendAlpha(_c1_,_c2_)
  _c1_\rgba[0] = ((_c2_\rgba[0] * _c2_\rgba[3]) + (_c1_\rgba[0] * (256 - _c2_\rgba[3]))) >> 8
  _c1_\rgba[1] = ((_c2_\rgba[1] * _c2_\rgba[3]) + (_c1_\rgba[1] * (256 - _c2_\rgba[3]))) >> 8
  _c1_\rgba[2] = ((_c2_\rgba[2] * _c2_\rgba[3]) + (_c1_\rgba[2] * (256 - _c2_\rgba[3]))) >> 8
EndMacro

Procedure.i Main()
  Protected c1.COLOR;ziel
  Protected c2.COLOR;quelle
  
  c1\code = $FFFFFFFF
  c2\code = $22222222
  
  mBlendAlpha(c1,c2);mit alpha von c2 -> c2\rgb[3]
  
  Debug "0x" + Hex(c1\code,#PB_Long)
  
  ProcedureReturn #Null
EndProcedure

Main()

End

Re: Fragen zum AlphaBlending

Verfasst: 29.10.2020 13:45
von Mijikai
Hab das Problem gelöst :oops:

Code: Alles auswählen


EnableExplicit

Macro mAlphaAdd(_a1_,_a2_);visuell "addiert" es wird tranzparenter -> (Quell Alpha - Zusatz Alpha) 
  If (_a1_ - _a2_) < 0
    _a1_ = 0
  Else
    _a1_ - _a2_
  EndIf
EndMacro

Macro mAlphaSubtract(_a1_,_a2_);visuell "subtrahiert" -> Ziel Alpha + (Quell Alpha - Zuatz Alpha)
  If (_a1_ + _a2_) > 255
    _a1_ = 255
  Else
    _a1_ + _a2_
  EndIf
EndMacro

Procedure.i Main()
  Protected a1.a
  Protected a2.a
  
  a1 = 100
  a2 = 20
  
  mAddAlpha(a1,a2)
  Debug a1
  
  ProcedureReturn #Null
EndProcedure

Main()

End

Fragt sich nur ob die Makros noch effizienter geschrieben werden können ?