AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Tiles Funktion von Photoshop
Thema durchsuchen
Ansicht
Themen-Optionen

Tiles Funktion von Photoshop

Offene Frage von "-NIP-"
Ein Thema von -NIP- · begonnen am 6. Dez 2004 · letzter Beitrag vom 7. Dez 2004
Antwort Antwort
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#1

Tiles Funktion von Photoshop

  Alt 6. Dez 2004, 19:16
Hi!
Ich habe hier mal versucht den Tiles-Filter von Photoshop nachzuahmen:

Delphi-Quellcode:
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;
Aber aus irgendeinem Grund funzt das nicht. Wenn ich das anwende passiert GARNICHTS!
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-
Christian
  Mit Zitat antworten Zitat
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#2

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 20:05
Kommt schon Leute
Liegt es an der Zuweisung von Endbild zu Zielbild?
Da auf dem Zielbild ja garnichts erscheint, bin ich ziemlich ratlos...

-NIP-
Christian
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 20:25
Deklariere Zielbild mal als var oder das ganze als Funktion.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 20:27
Besser ist ZielBitmap.Assign(EndBitmap);
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 20:29
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#6

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 21:08
Wenn ich euch richtig verstanden habe muss der Code nach dem ganzen Zeichnen so enden:
Delphi-Quellcode:
if Assigned(Zielbild) then
begin
  Zielbild.Free;
end;
Zielbild.Assign(Endbild);
Wenn ich den Code dann ausführe gibt es komischerwiese eine AccessViolation...
Hab ich was falsch gemacht?

-NIP-

edit: Und zwar wenn ich die PaintBox repainte.
Christian
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 21:20
Zitat von -NIP-:
Wenn ich euch richtig verstanden habe muss der Code nach dem ganzen Zeichnen so enden:
Delphi-Quellcode:
if Assigned(Zielbild) then
begin
  Zielbild.Free;
end;
Zielbild.Assign(Endbild);
Jetzt hast du 2 Varianten gemischt.

Entweder nur mit Zielbild.Assign(), oder mit Freigeben und nachher die Zuweisung wie oben (Zielbild := Endbild.
Die 2. Variante dürfte schneller sein.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#8

Re: Tiles Funktion von Photoshop

  Alt 7. Dez 2004, 21:36
Zitat von dizzy:
Zitat von -NIP-:
Wenn ich euch richtig verstanden habe muss der Code nach dem ganzen Zeichnen so enden:
Delphi-Quellcode:
if Assigned(Zielbild) then
begin
  Zielbild.Free;
end;
Zielbild.Assign(Endbild);
Jetzt hast du 2 Varianten gemischt.

Entweder nur mit Zielbild.Assign(), oder mit Freigeben und nachher die Zuweisung wie oben (Zielbild := Endbild.
Die 2. Variante dürfte schneller sein.
Also die 2. hat nicht funktioniert, aber die erste. Dabei kam allerdings voll der Müll raus
Muss meinen Code wohl noch einmal unter die Haube schaun

Danke

-NIP-
Christian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 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