Alpha-Wert eines Bildes nach außen hin kleiner werden lassen
Übersicht

![]() |
BrotenkopfBetreff: Alpha-Wert eines Bildes nach außen hin kleiner werden lassen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute
Ich bin hier im Forum auf eine Funktion gestoßen die eine Bild Transparent macht https://www.blitzforum.de/foru...highlight= Die Funktion geht ja jeden Pixel des Bildes einzeln durch mit For i=x For j=y und ich weiß ja das das Zentrum des Bildes den Wert: X+(ImageWidth(Bild)/2) und Y+(ImageHeight(Bild)/2) hat Wie kann ich nun den Alpha-Wert vom Mittelpunkt des Bildes bis zum äußeren Rand des Bildes kleiner werden lassen sodass der Rand dann nur noch 0.0000...1 und der Mittelpunkt den Alpha-Wert 1 hat? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic beherrscht kein Alpha, entsprechend langsam wird diese Funktion sein...
Du kannst den Abstand mittels Pythagoras bestimmten, Normalisieren (durch das Maximum teilen) und in die Berechnung einfließen lassen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Brotenkopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich habe jetzt den Punkt P1 mit P1x und P1y (Zentrum) also x+imagewidth()/2 und y+imageHeight()/2
dann den Punkt P2 welcher sich auf der Hälfte des Bildes ganz oben also x+imagewidth()/2 und Y befindet dann die Länge der Seite P1-P2 welche ja immer gleich ist. dann berechne ich in der Schleife die seite P2-P3 und den berechne dann den Abstand aus den Beiden Seiten. Wenn ich nun alpha=Abstand/Maximum setze sieht es noch nicht so aus wie ich mir das vorgestellt habe Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() SeedRnd MilliSecs() ;Bild1 Bild=CreateImage(250,250) Bild2=CreateImage(250,250) SetBuffer ImageBuffer(Bild) Color Rand(0,255),Rand(0,255),Rand(0,255):Rect 0,0,250,250 SetBuffer ImageBuffer(Bild2) Color Rand(0,255),Rand(0,255),Rand(0,255):Rect 0,0,250,250 SetBuffer BackBuffer() r=1 Repeat Cls DrawImage bild,35,35 AlphaImage Bild2,25,25 Flip Until KeyDown(1) Function Alphaimage(bi,x#,y#) w=ImageWidth(bi) h=ImageHeight(bi) p1x#=x+(ImageWidth(bi)/2) p1y#=y+(ImageHeight(bi)/2) p2x#=x+(ImageWidth(bi)/2) p2y#=y p1p2_max#=Sqr(((p1x-p2x)*(p1x-p2x))+((p1y-p2y)*(p1y-p2y))) p2p3_max#=Sqr(((p2x-x)*(p2x-x))+((p2y-y)*(p2y-y))) max#=Sqr(p1p2_max*p1p2_max)+Sqr(p2p3_max*p2p3_max) LockBuffer BackBuffer() LockBuffer ImageBuffer(bi) For i#=x To x+w-1 For j#=y To y+h-1 p2p3#=Sqr(((p2x-i)*(p2x-i))+((p2y-j)*(p2y-j))) abstand#=Sqr(p1p2*p1p2)+Sqr(p2p3*p2p3) a#=Abstand/max rgb=ReadPixelFast(i,j,BackBuffer()) r=(rgb And $FF0000)/$10000 g=(rgb And $FF00)/$100 b=rgb And $FF rgb2=ReadPixelFast(i-x,j-y,ImageBuffer(bi)) r2=(rgb2 And $FF0000)/$10000 g2=(rgb2 And $FF00)/$100 b2=rgb2 And $FF r=r+(r2-r)/(1/a#) g=g+(g2-g)/(1/a#) b=b+(b2-b)/(1/a#) rgb=r*$10000 + g*$100 + b WritePixelFast(i,j,rgb,BackBuffer()) Next Next UnlockBuffer ImageBuffer(bi) UnlockBuffer BackBuffer() End Function |
||
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie willst du denn, dass es aussieht?
Ich verstehe nicht ganz, warum p2y immer gleich y ist. Ich hab den Wert mal so definiert: Code: [AUSKLAPPEN] p2y#=y+(ImageHeight(bi)/2)
und finde, dass das eigentlich recht gut aussieht. Auch diese komischen unteren Ecken (wo der Alphawert dann gleich 0 ist) sind dann Geschichte. Hab mir den Code jetzt zwar nicht genau angesehen, aber ich verstehe ihn nicht wirklich. ^^ Auch denke ich mal, dass a = Abstand/Max nie gleich 1 sein kann, wenn das denn beabsichtigt war. MFG Lador |
||
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran" Screenshot | Worklog Fortschritt: ca. 70% |
![]() |
Brotenkopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich wollte das es genau SO aussieht
Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() SeedRnd MilliSecs() ;Bild1 Bild=CreateImage(800,600) Bild2=CreateImage(800,600) SetBuffer ImageBuffer(Bild) Color Rand(0,255),Rand(0,255),Rand(0,255):Rect 0,0,800,600 SetBuffer ImageBuffer(Bild2) Color Rand(0,255),Rand(0,255),Rand(0,255):Rect 0,0,800,600 SetBuffer BackBuffer() r=1 Repeat Cls DrawImage bild,0,0 Alphaimage(bild2,0,0) Flip Until KeyDown(1) Function Alphaimage(bi,x#,y#) w=ImageWidth(bi) h=ImageHeight(bi) p1x#=x+(ImageWidth(bi)/2) p1y#=y+(ImageHeight(bi)/2) p2x#=x+(ImageWidth(bi)/2) p2y#=y+(ImageHeight(bi)/2) p1p2_max#=Sqr(((p1x-p2x)*(p1x-p2x))+((p1y-p2y)*(p1y-p2y))) p2p3_max#=Sqr(((p2x-x)*(p2x-x))+((p2y-y)*(p2y-y))) max#=Sqr(p1p2_max*p1p2_max)+Sqr(p2p3_max*p2p3_max) LockBuffer BackBuffer() LockBuffer ImageBuffer(bi) For i#=x To x+w-1 For j#=y To y+h-1 p2p3#=Sqr(((p2x-i)*(p2x-i))+((p2y-j)*(p2y-j))) abstand#=Sqr(p1p2*p1p2)+Sqr(p2p3*p2p3) a#=1-Abstand/max rgb=ReadPixelFast(i,j,BackBuffer()) r=(rgb And $FF0000)/$10000 g=(rgb And $FF00)/$100 b=rgb And $FF rgb2=ReadPixelFast(i-x,j-y,ImageBuffer(bi)) r2=(rgb2 And $FF0000)/$10000 g2=(rgb2 And $FF00)/$100 b2=rgb2 And $FF r=r+(r2-r)/(1/a#) g=g+(g2-g)/(1/a#) b=b+(b2-b)/(1/a#) rgb=r*$10000 + g*$100 + b WritePixelFast(i,j,rgb,BackBuffer()) Next Next UnlockBuffer ImageBuffer(bi) UnlockBuffer BackBuffer() End Function weiß nich hatte wohl nen Denkfehler an der Stelle. Danke an Lador und Xeres |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group