Bilder runden

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Addi

Betreff: Bilder runden

BeitragDo, Feb 16, 2012 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Community
Hab vor langer Zeit (ca. nem halben Jahr), auf Grund einer Fehlenden Maske welche Bilder rundet, mal eine Funktion geschrieben welche das übernimmt:

BlitzBasic: [AUSKLAPPEN]


;Bild runden =)
Function MaskImgRound( Pic=0 , MX=0 , MY=0 , DX=0 , DY=0 , R=0 , G=0 , B=0 )
Local TempBuffer = GraphicsBuffer()
Local CC=255*$1000000+R*$10000+G*100+B
Local ColorCode=0

;ImageBuffer einstellen um auf dem Bild malen zu können
SetBuffer ImageBuffer(Pic)

;Auf dem geladenen Bild and MX und MY (Kreismittelpunkt) ein Kreis mit DX/2 und DY/2 als Radius
Color R,G,B
Oval MX-(DX/2),MY-(DY/2),DX,DY,0

;Buffer für ReadPixelFast und WritePixelFast sperren
LockBuffer ImageBuffer(Pic)

;Alle Pixel auserhalb des Kreis werden unsichtbar gemacht
For Y=0 To ImageHeight(Pic)-1
For X=0 To MX
ColorCode=ReadPixelFast(X,Y)

If ColorCode=CC Then Exit
WritePixelFast X,Y,CC
Next

For X=ImageWidth(Pic)-1 To MX Step -1
ColorCode=ReadPixelFast(X,Y)

If ColorCode=CC Then Exit
WritePixelFast X,Y,CC
Next
Next

;Bild Maskieren
MaskImage Pic,R,G,B

;Buffer freigeben und den BackBuffer setzen
UnlockBuffer ImageBuffer(Pic)
SetBuffer TempBuffer
End Function



Pararmeter
Pic: Das zu rundende Bild
MX: X-Position des Kreismittelpunktes auf dem Bild
MY: Y-Position des Kreismittelpunktes auf dem Bild
DX: X-Durchmesser des Kreises (in Pixel)
DY: Y-Durchmesser desKreises (in Pixel)
R : Rotanteil der Deckfarbe
G : Grünanteil der Deckfarbe
B : Blauanteil der Deckfarbe

Falls Unklarheiten oder Bugs sind -> Bitte Melden
Hoffe ihr könnt damit was anfangen Very Happy

Edit:
Habe es geupdatet
  • Zuletzt bearbeitet von Addi am Sa, Dez 07, 2013 14:44, insgesamt 2-mal bearbeitet

Xeres

Moderator

BeitragDo, Feb 16, 2012 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte es nicht
Code: [AUSKLAPPEN]
To ImageHeight(Pic)-1
heißen? Könnte so einige Grafikkarten zum meckern bringen. Auch könntest du die zweite X-Schleife in die erste Y-Schleife verschieben.
Am Ende der Funktion setzt du einfach den Frontbuffer... setze ordentlich alles so zurück, wie du es vorgefunden hast.
Ich persönlich würde es auch vorziehen, den Kreismittelpunkt an zu geben.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Addi

BeitragDo, Feb 16, 2012 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres
Ja stimmt du hast recht, das hab ich wohl übersehen. Das werde ich morgen sofort Updaten. Danke für die Verbesserungsvorschläge.
Das mit dem Kreismittelpunkt verstehe ich jedoch nicht ganz.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group