Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Do 05.02.04 05:25 
Zuerst: das ganze ist nur ein Beispiel. Die Grafik ist kompiziert. Um es zu vereinfachen mache ich als Beispiel nur ein roten Kreis auf weißer Fläche.

Wenn ich z.B. auf einer weißen Fläche ein roten Kreis zeichne (mit Delphi Canvas Funktion), dann hab ich eben einen roten Kreis auf weißen Flächen. Wie erwartet gibt es nur zwei Farben auf der Bitmat: weiß und rot. Auch gibt es keine weichen Übergänge zwischen dem Kreis und der Flächen. Der Kontrast ist deutlich.

Jetzt würde ich gerne diese Bitmap auf eine ander Bitmap kopieren. Die weiße Fläche soll die transparente Farbe sein. Was ich also kopieren will ist in diesem Fall nur der Kreis (da die weiße Fläche transparent ist). Das Problem ist, daß die die Bitmap in die kopiert werden soll ein TrueColor-Bild ist. Ein reiner einfarbiger Kreis wirkt wie ein Stempel. Man sieht von dem Kreis die einzelnen Pixel usw. Was ich als will ist, daß der rote Kreis mit dem Bild der zweiten Bitmap verschmilzt, bzw. nur die Ränder des Kreises sollen mit den Farben der Umgebung vermischt werden, so das ein weicher Übergang entsteht.

Mit Bildbearbeitungsprogrammen geht so ein weicher Übergang (z.B. Photoshop). PBrush kann das nicht. PBrush verschmilzt die Ränder nicht, so das ein starker Kontrast zwischen dem Bild und dem eingefügten Teil da ist.

Aber mir geht es hier nicht um eine Software, sondern um eine Funktion. Eine Funktion, die ein Bild in ein anders einfügt und die Ränder abgleicht. Kennt einer sowas?

_________________
Popov
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Do 05.02.04 14:36 
Der FAchbegriff hierfür heisst : ANTIALIASING

Im Prinzip müsstest du das Pixelweise machen....

Entlang der Ränder des Kreises (oder des Images) ein Array in jeder Zeile aufbauen das sagen wir mal 2-3 Pixel links und rechts dieser Grenze umfasst und dann die Farbwertverteilung innerhalb dieses Pixelarrarys angleichen. Das kannst du entweder linear machen (ein Gradient entsteht), oder progressiv.....

Anderer Ansatz mit DelphiBordmitteln (Ansonsten dürften die Jedis da auf jeden Fall was passendes haben) wäre:

Du erzeugst einfach etwas "noise" (Pixelrauschen) um die einzufügende Grafik..... Damit passt du die Helligkeit um die eingefügte Bitmap etwas an... Ein roter Kreis auf weiss hätte dann einen leicht grauen "Schatten" rundherum. Damit das eben nich auch wider wie ein Stempel aussieht darfst du nicht alle Punkte dieses Schattens zeichnen, sondern musst per Zufall nur einige (viele) zeichnen......

PS: geil siehts aus, wenn man die Farbwerte des ersten Bitmap ändert (dabei wird das Bitmap ja nicht reinkopiert) und zwar fliessend... Dann "morpht" das Bild sogar in das andere rein...
Is aber nur ein Tipp wenn dir mal langweilig ist :-)

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 05.02.04 20:24 
Hallo
vielleicht hilft dir das weiter:
www.efg2.com/Lab/Ima...ssing/Feathering.htm

mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: So 08.02.04 08:43 
Danke für die Tipps. Natürlich hab ich gehoft irgendwo ein fertigen Code zu finden, aber es hat auch so geklappt. Ich hab mit mir selbst was geschrieben.

_________________
Popov