Zwei transparte bilder verbinden.
Hallo. wie kann ich zwei Bilder auf einander liegen (die bilder können die transparenten farben haben).
MFG |
Re: Zwei transparte bilder verbinden.
was für bilder genau?
Du könntest es mit Graphics32 (www.graphics32.org) machen, entweder mit layers, oder indem du einfach das eine auf das andere zeichnest (evtl. musst du da ein paar optionen einschalten). Ansonsten kannst du das natürlich selber machen:
Delphi-Quellcode:
Keine Garantie auf Fehlerfreiheit, höchstwahrscheinlich muss man da noch einiges umcasten.
function Combine(Bottom, Top: TBitmap; alpha: array of Byte): TBitmap;
var btmptr,topptr,resptr: Pointer; begin if length(alpha) < Top.Width * Top.Height then raise Exception.Create('nicht genug alpha!'); Result := TBitmap.Create; Result.Width := Bottom.Width; Result.Height := Bottom.Height; btmptr := Bottom.Scanline[0]; topptr := Top.Scanline[0]; resptr := Result.Scanline[0]; for i := 0 to high(alpha) do begin resptr^ := CombineColors(btmptr^,topptr^,alpha[i]); Inc(btmptr); Inc(topptr); Inc(resptr); end; end; function CombineColors(c1,c2: TColor; fac: Byte): TColor; begin Result.Red := Round(c1.Red * (255-fac) / 255 + c2.Red * fac / 255); //das selbe für grün und blau, und evtl. muss man das erst mal in einen anderen record pressen, damit die felder verfügbar sind end; |
Re: Zwei transparte bilder verbinden.
|
Re: Zwei transparte bilder verbinden.
Nimm doch gleich DirectX oder Opengl.
Warum einfach wenn es auch schwer geht. |
Re: Zwei transparte bilder verbinden.
Gandalfus: Meinst du etwa, Photoshop benutzt OpenGL oder DirectX, um zwei Layer anzuzeigen? :shock:
Die Eingine zu initialisieren, Quads/Sprites erstellen und dann die Bilder als Texturen drauf... neee... das wär mir dann doch ein wenig zu overpowered. |
Re: Zwei transparte bilder verbinden.
Ich meine das man dazu nicht Graphics32(oder kryptische Api Befehle) braucht sondern GDI bzw TCanvas völlig ausreicht.
|
Re: Zwei transparte bilder verbinden.
Zitat:
|
Re: Zwei transparte bilder verbinden.
[Fehler] Unit1.pas(43): Inkompatible Typen: 'TColor' und 'procedure, untyped pointer or untyped parameter'
:( |
Re: Zwei transparte bilder verbinden.
Die Fehlermeldung sagt doch schon alles: Du dekrementierst die Zeilennummer um 1 und bekommst die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest.
Du könntest auch ein paar Glaskugeln für die DP-Member spenden. Oder beten, das soll manchmal auch helfen. Aber komm bloß nicht auf die Idee, uns den Code von Zeile 43 zu zeigen, da könnten wir ja gleich mit Raten anfangen. PS: Nimm lieber die genannten GDI-Funktionen. Deren Richtigkeit haben schon Tausende von Programmmieren bestätigt ;) . |
Re: Zwei transparte bilder verbinden.
habe das so gelöst.
Delphi-Quellcode:
Die lösung kommt aus einen anderen Forum. Das ist einfacher (finde ich). Für euere Lösung bin ich auch sehr dankbar!
var
overlay: TBitmap; ziel: TBitmap; begin overlay := TBitmap.create; overlay.loadfromfile('xxxxxxxxxxx'); overlay.transparentcolor := clblue; overlay.transparent := true; ziel := TBitmap.create; ziel.loadfromfile('xxxxxxxxxxx'); ziel.canvas.draw(x,y,overlay); //übereinander zeichen Form1.canvas.draw(0,0,ziel); //Das ganze noch irgendwo anzeigen |
Re: Zwei transparte bilder verbinden.
Zitat:
|
Re: Zwei transparte bilder verbinden.
ja. das war ich (ich habe hier und dort nachgefragt) und eine gute Lösung (mit fremde Hilfe) gefunden. An mein Program angepasst.. und das funktioniert.. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr. |
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