Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Simple Grafikfunktionen (https://www.delphipraxis.net/91338-simple-grafikfunktionen.html)

.chicken 3. Mai 2007 16:15


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

mkinzler 3. Mai 2007 16:18

Re: Simple Grafikfunktionen
 
Du mußt dazu wohl pixelweise auf den Canvas malen.

.chicken 3. Mai 2007 16:20

Re: Simple Grafikfunktionen
 
Echt? Kann ich mir nich ne Funktion schreiben um nach und nach die Farben "verschmelzen" zu lassen?

mkinzler 3. Mai 2007 16:24

Re: Simple Grafikfunktionen
 
Delphi bietet standardmäßig keine Bildverarbeitungsfunktionen. Vielleicht mit einer Fremdbibliothek.

DGL-luke 3. Mai 2007 16:30

Re: Simple Grafikfunktionen
 
Hallo,

das geht natürlich:

Delphi-Quellcode:
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;
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.

Das musst du jetzt nur noch in eine Schleife einfügen, die über die gesamte länge iteriert und entsprechend zeichnet.

.chicken 3. Mai 2007 16:39

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?

mkinzler 3. Mai 2007 16:40

Re: Simple Grafikfunktionen
 
Geht über Ausmaskierung

DGL-luke 3. Mai 2007 16:48

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:
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;
So in etwa sollte das hinhauen. exakte formeln sollten sich über internet aber durchaus finden lassen, z.B. in der Wikipedia.

.chicken 3. Mai 2007 18:17

Re: Simple Grafikfunktionen
 
Super, danke das seh ich mir genauer an ;-)

DGL-luke 3. Mai 2007 18:42

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 11:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz