Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildeffekt in Delphi nachbauen (https://www.delphipraxis.net/120095-bildeffekt-delphi-nachbauen.html)

Absturzkreatur 5. Sep 2008 17:36


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.

http://members.aon.at/rbraunsb/tmp/Fragestellung.JPG

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

Prototypjack 5. Sep 2008 19:01

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

BullsEye 5. Sep 2008 19:07

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 ;)

Absturzkreatur 5. Sep 2008 19:12

Re: Bildeffekt in Delphi nachbauen
 
Zitat:

Zitat von BullsEye
Ich denke mal, du meinst das das Bild weiß umrandet ist....


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

Torpedo 5. Sep 2008 21:14

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.

BullsEye 5. Sep 2008 22:43

Re: Bildeffekt in Delphi nachbauen
 
Zitat:

Zitat von Torpedo
Problem wären die verschiedenen größen von Bildern.

Man könnte das Bild automatisch anpassen. Würde aber ggf Qulitätsverluste übelsten grades geben.
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...

Absturzkreatur 6. Sep 2008 20:24

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 (www.delphipraxis.net/topic11274.html). Diese habe ich etwas modifiziert und es funktioniert eigentlich schon sehr gut.

Hier der Quelltext:

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

Vielen Dank

BullsEye 7. Sep 2008 10:11

Re: Bildeffekt in Delphi nachbauen
 
Delphi-Quellcode:
if SetWindowRgn(Handle, CreateEllipticRgn(0, 0, Width, Height), True) = 0  then
    RaiseLastOSError;
Hiermit kann man eine Elipse zeichnen, es gilt zumind für das Formular, aber vllt kannst du es ja irgendwie an dein Projekt anbinden ;)

Garfield 7. Sep 2008 10:24

Re: Bildeffekt in Delphi nachbauen
 
Vielleicht hilft das auch: http://www.efg2.com/Lab/ImageProcessing/Feathering.htm

Absturzkreatur 7. Sep 2008 14:59

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 08:41 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