![]() |
Simple Grafikfunktionen
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich schreib mir gerade ein paar simple Grafikfunktionen zusammen, wie zB ein einfacher Farbverlauf.
Jetzt möchte ich gerne eine InnerGlow Funktion, ähnlich der von Photoshop (natuerlich nicht so umfangreich) schreiben. Also sozusagen ein leuchtender, innerer Border. Hab mir das so gedacht, dass ich es ähnlich eines Farbverlaufs mache, und dabei die Farbe immer transparenter werden lasse (also der Farbe darunter immer näher kommen lasse). Weiss wer wie ich das machen kann? Hoffe ihr versteht was ich meine ich häng mal n Bildchen dran! MfG |
Re: Simple Grafikfunktionen
Du mußt dazu wohl pixelweise auf den Canvas malen.
|
Re: Simple Grafikfunktionen
Echt? Kann ich mir nich ne Funktion schreiben um nach und nach die Farben "verschmelzen" zu lassen?
|
Re: Simple Grafikfunktionen
Delphi bietet standardmäßig keine Bildverarbeitungsfunktionen. Vielleicht mit einer Fremdbibliothek.
|
Re: Simple Grafikfunktionen
Hallo,
das geht natürlich:
Delphi-Quellcode:
falls ich mich nicht irgendwo vertan hab, bekommst du damit auf einem linearen farbverlauf von ColStart nach ColEnd, der über die Länge Length geht, die Farbe an der Stelle Step.
function LinearGradientStep(ColStart, ColEnd: TColor; Length, Step: Integer): TColor;
var r1,r2,g1,g2,b1,b2,rr,gr,br,rd,bd,gd: Byte; //1,2,result,delta begin r1 := GetRValue(ColStart); g1 := GetGValue(ColStart); b1 := GetBValue(ColStart); r2 := GetRValue(ColEnd); g2 := GetGValue(ColEnd); b2 := GetBValue(ColEnd); rd := r2 - r1; gd := g2 - g1; bd := b2 - b1; rr := r1 + round(rd * step / length); gr := g1 + round(gd * step / length); br := b1 + round(bd * step / length); Result := RGB(rr,gr,br); end; Das musst du jetzt nur noch in eine Schleife einfügen, die über die gesamte länge iteriert und entsprechend zeichnet. |
Re: Simple Grafikfunktionen
Hmm..ich glaube da hast du falsch verstanden was ich möchte (oder ich deinen Code :D).
Also den Farbverlauf habe ich schon selbst hinbekommen, was ich suche ist sozusagen eine Möglichkeit, eine Farbe "transparent" zu malen. Dass das so in Delphi nicht direkt Möglich ist ist mir durchaus klar, aber es gibt doch sicherlich eine Mathematische Funktion oder so, die mir einen Farbwert gibt. An die Funktion gebe ich Farbe1 und Farbe2 und einen Transparenzwert. Daraus errechnet er mir die neue Farbe, wenn Farbe2 ueber Farbe1 liegt. Sowas muss ich natuerlich selbst schreiben und ist nich von Delphi vorgegeben, aber es gibt doch sicher einen Term dazu oder sowas? |
Re: Simple Grafikfunktionen
Geht über Ausmaskierung
|
Re: Simple Grafikfunktionen
Hallo, da gibt es die beiden Verfahren "Blending" und noch was anderes, wo mir jetzt der name nicht einfällt. Aber du kannst es natürlich wiederum linear machen:
Delphi-Quellcode:
So in etwa sollte das hinhauen. exakte formeln sollten sich über internet aber durchaus finden lassen, z.B. in der Wikipedia.
function LinearBlendedColor(CBack, CFront: TColor; alpha: Byte): TColor;
var r1,r2,g1,g2,b1,b2,rr,gr,br: Byte; //1,2,result begin r1 := GetRValue(CBack); g1 := GetGValue(CBack); b1 := GetBValue(CBack); r2 := GetRValue(CFront); g2 := GetGValue(CFront); b2 := GetBValue(CFront); rr := r1 * round(1- (alpha / 255)) + r2 * round(alpha / 255); gr := g1 * round(1- (alpha / 255)) + g2 * round(alpha / 255); br := b1 * round(1- (alpha / 255)) + b2 * round(alpha / 255); Result := RGB(rr,gr,br); end; |
Re: Simple Grafikfunktionen
Super, danke das seh ich mir genauer an ;-)
|
Re: Simple Grafikfunktionen
Zeichenprogramme (Photoshop) und Grafiklibs (OpenGL, Graphics32) werden aber andere Formeln benutzen, die evtl. sogar in den Farbkomponenten unterschiedlich gewichtet sind.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz