Tiles Funktion von Photoshop
Hi!
Ich habe hier mal versucht den Tiles-Filter von Photoshop nachzuahmen:
Delphi-Quellcode:
Aber aus irgendeinem Grund funzt das nicht. Wenn ich das anwende passiert GARNICHTS!
procedure Vierecke (Quellbild:TBitmap; Zielbild:TBitmap; XAnzahl:Integer;
YAnzahl:Integer; Abweichung:Integer; Hintergrundfarbe:TColor); var Breite,Hoehe,i,i2,AbweichungX,AbweichungY,XRasterPos, YRasterPos,HoehePos,BreitePos:Integer; EndBild:TBitmap; begin Breite:=Quellbild.Width div XAnzahl; Hoehe:=Quellbild.Height div YAnzahl; EndBild:=TBitmap.Create; EndBild.Canvas.Brush.Color:=Hintergrundfarbe; EndBild.Width:=Quellbild.Width; EndBild.Height:=Quellbild.Height; for i:= 1 to XAnzahl*YAnzahl do begin AbweichungX:=random(Abweichung*2); AbweichungY:=random(Abweichung*2); for i2:= 1 to Breite*Hoehe do begin if i2=1 then begin BreitePos:=XRasterPos*Breite; HoehePos:=YRasterPos*Hoehe; end; if BreitePos > Breite*XRasterPos then BreitePos:=XRasterPos*Breite else begin BreitePos:=BreitePos+1; HoehePos:=HoehePos+1; end; EndBild.Canvas.Pixels[BreitePos-AbweichungX+Abweichung,HoehePos-AbweichungY+Abweichung]:=Quellbild.Canvas.Pixels[BreitePos,HoehePos]; end; if XRasterPos > XAnzahl then XRasterPos:=0 else XRasterPos:=XRasterPos+1; if YRasterPos > YAnzahl then YRasterPos:=0 else YRasterPos:=YRasterPos+1; Zielbild:=Endbild; end; end; Liegt das an der Art, wie ich das Endprodukt dem Zielbild zuweise? Wenn ich es compiliere, sagt er, dass der auf Zielbild zugewiesene Wert niemals benutzt wird!?! Ich hoffe ihr macht euch die Mühe mir zu helfen ;) . -NIP- |
Re: Tiles Funktion von Photoshop
Kommt schon Leute :zwinker:
Liegt es an der Zuweisung von Endbild zu Zielbild? Da auf dem Zielbild ja garnichts erscheint, bin ich ziemlich ratlos... -NIP- |
Re: Tiles Funktion von Photoshop
Deklariere Zielbild mal als var oder das ganze als Funktion.
|
Re: Tiles Funktion von Photoshop
Besser ist ZielBitmap.Assign(EndBitmap);
|
Re: Tiles Funktion von Photoshop
Problem dabei wäre allerdings dass du ein Speicherleck erzeugst. Vor der Zuweisung (wenn Zielbild als var-Parameter deklariert ist) solltest du ein "If Assigned(Zielbild) then Zielbild.free;" machen.
|
Re: Tiles Funktion von Photoshop
Wenn ich euch richtig verstanden habe muss der Code nach dem ganzen Zeichnen so enden:
Delphi-Quellcode:
Wenn ich den Code dann ausführe gibt es komischerwiese eine AccessViolation... :gruebel:
if Assigned(Zielbild) then
begin Zielbild.Free; end; Zielbild.Assign(Endbild); Hab ich was falsch gemacht? -NIP- edit: Und zwar wenn ich die PaintBox repainte. |
Re: Tiles Funktion von Photoshop
Zitat:
Entweder nur mit Zielbild.Assign(), oder mit Freigeben und nachher die Zuweisung wie oben (Zielbild := Endbild;). Die 2. Variante dürfte schneller sein. |
Re: Tiles Funktion von Photoshop
Zitat:
Muss meinen Code wohl noch einmal unter die Haube schaun ;) Danke -NIP- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 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