![]() |
Bildeffekt in Delphi nachbauen
Eins vorweg: Ich weiß, dass der Titel präziser sein sollte. Jedoch habe ich nicht gewusst, wie ich den Effekt des Bildes genau beschreiben soll.
Ich habe etwas im Internet gesurft und habe einen Effekt an den Rändern eines Bildes gesehen, der total cool ist. Da er schwer zu beschreiben ist, habe ich einen Ausschnitt des Bildes drangehängt. ![]() Jedenfalls würde ich gerne den Effekt nachbauen, jedoch ist meine Pixels[]-Lösung äußerst langsam. Es wäre schön, wenn mir jemand bei meinem Problem helfen könnte. Vielen Dank im Vorraus, Absturzkreatur |
Re: Bildeffekt in Delphi nachbauen
Moin,
Ehrlich gesagt wäre es vielleicht hilfreich, wenn du beschreiben würdest, was genau du haben willst. Denn ich persönlich kann aus dem Bild keine speziellen Muster oder Effekte entnehmen. Grüße, Max |
Re: Bildeffekt in Delphi nachbauen
Ich denke mal, du meinst das das Bild weiß umrandet ist....
Füg das Bild doch bitte in den Anhang ein, ersparste den Mods nen bissel Arbeit ;) |
Re: Bildeffekt in Delphi nachbauen
Zitat:
Genau! Diese weiße Umrandung, die mit dem eigentlichen Bild etwas verschwimmt. Es wäre echt super, wenn mir geholfen werden könnte. Vielen Dank nochmals |
Re: Bildeffekt in Delphi nachbauen
Da würde es wohl reichen einfach ein Bild der Umrandung auf das eigentliche Bild draufzumalen. Und dieses Rand-Bild hat eben an gewissen stellen Transparente pixel (da wo man das Bild sehen soll) oder halbtransparente (wo es verschmwimmt) bzw. beliebig transparent (Verlauf).
Kurz: Bild + Randbild(PNG mit transparenz) = Zielbild Problem wären die verschiedenen größen von Bildern. |
Re: Bildeffekt in Delphi nachbauen
Zitat:
Eine andere Möglichkeit wäre doch: - Bild laden - Größe messen - 'Weiße Wolken' vom Rand aus zeichen - Screenshot vom Bild machen und das als Ausgabe speichern.. Hätte den Vorteil, das man auch einstellen könnte wie stark der Rand sein soll... |
Re: Bildeffekt in Delphi nachbauen
Vielen Dank für die schnellen Hilfen.
In der Zwischenzeit habe ich mich auch natürlich noch auf die Suche nach Lösungen gemacht und eine "Halblösung" gefunden. In diesem coolen Forum habe ich die Funktion "DrawFrostedGlass" gefunden ( ![]() Hier der Quelltext:
Delphi-Quellcode:
Soweit, so gut. Ich habe aber noch ein Problem: Dieser Effekte sollte ovalförmig um das Bild gezeichnet werden. Da ich nun endgültig keinen Plan mehr habe, wie das gehen könnte, bin ich wieder auf eure Hilfe angewiesen.
procedure TForm1.FormClick(Sender: TObject);
var blending, i: Byte; begin blending := 250; for i := 0 to 25 do begin Rechteck := Rect(0, 100 + i, Width, 102 + i); blending := blending - 10; DrawFrostedGlass(Image1.Picture.Bitmap, Rechteck, 16777215, blending); end; end; procedure SplitColorToRGB(const Color: TColor; var r, g, b: Byte); begin r := ColorToRGB(Color) and $0000FF; g := (ColorToRGB(Color) and $00FF00) shr 8; b := (ColorToRGB(Color) and $FF0000) shr 16; end; function RGBToColor(const r, g, b: Byte): TColor; begin Result := TColor(r + (g shl 8) + (b shl 16)); end; function CalcBlending(const Source, Back, Alpha: Byte): Byte; begin Result := Back + ((Source - Back) * Alpha div 255); end; procedure TForm1.DrawFrostedGlass(Bitmap: TBitmap; GlassRect: TRect; const Milk: TColor = clWhite; Alpha: Byte = 128); var r, g, b: Byte; x, y: Integer; P: PByteArray; begin with Bitmap.Canvas, Bitmap.Canvas.Pen do begin Color := Milk; Brush.Style := bsClear; rectangle(0, 0, 0, 0); //warum das hier stehen muss, damit der Effekt gezeichnet // wird, verstehe ich auch nicht end; Bitmap.PixelFormat := pf24Bit; GlassRect.Left := (GlassRect.Left * 3) + 3; GlassRect.Right := (GlassRect.Right * 3) - 3; SplitColorToRGB(Milk, r, g, b); for y := GlassRect.Top + 1 to GlassRect.Bottom - 1 do begin P := Bitmap.ScanLine[y]; x := GlassRect.Left; repeat P[x+0] := CalcBlending(P[x+0], r, Alpha); P[x+1] := CalcBlending(P[x+1], g, Alpha); P[x+2] := CalcBlending(P[x+2], b, Alpha); Inc(x, 3); until x >= GlassRect.Right; end; end; Vielen Dank |
Re: Bildeffekt in Delphi nachbauen
Delphi-Quellcode:
Hiermit kann man eine Elipse zeichnen, es gilt zumind für das Formular, aber vllt kannst du es ja irgendwie an dein Projekt anbinden ;)
if SetWindowRgn(Handle, CreateEllipticRgn(0, 0, Width, Height), True) = 0 then
RaiseLastOSError; |
Re: Bildeffekt in Delphi nachbauen
Vielleicht hilft das auch:
![]() |
Re: Bildeffekt in Delphi nachbauen
OMG! Der Link zu "Feathering" ist der absolute Hammer! Vielen Dank. Das dortige Progg übertrifft alle meine Erwartungen!
Vielen Dank nochmals, ihr habt es echt voll drauf! Zwar werde ich noch einige Tage davorsitzen, und die wesentlichen von den unwesentlichen Codes auseinandertüfteln, aber mit Sicherheit lerne ich dabei noch einiges in Delphi (was definitiv nicht schwer sein wird). Danke BullsEye, Torpedo, Prototypjack und zuguterletzt Garfield. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 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