Seite 2 von 2

Verfasst: 07.07.2009 14:35
von Fluid Byte
Genau, die IDE mit ihren "unsinnigen Fehlern" ist Schuld :roll:

Nun mal Schluss mit Kindergarten spider. Poste den vollständigen Quelltext und die exakten Fehlermeldungen.

Verfasst: 07.07.2009 15:33
von spider84
Also mit Kindergarten hat das nix zu tun, ein Virus wirds wohl auch nicht sein. Und die IDE habe ich als Symptom und nicht als Ursache genannt. Denke das Ding bekam zu warm und erzeugte Speicherfehler - ist aber eigentlich auch unwahrscheinlich, weil ich ihn nicht ausgelastet hatte.
Wie dem auch sei...

Ich habe mein ultra-langsames Proof-of-concept fertig - es verkleinert ein Bild um 20 Pixel in der Breite und stellt dabei die seams dar. (Vorsicht: dauert auf meinem Notebook etwa 2 Minuten bis er durch ist und es beginnt gleich nach dem laden eines Bildes. Es ist kein Zoom implementiert, also bitte entsprechend kleine Bilder benutzen!) Die Breitensuche habe ich mir jetzt allerdings gespart, sonst wäre es noch langsamer und hätte mich vermutlich nochmal eine Stunde gekostet...

http://em.q-soft.ch/145seam.exe

Der Hauptübeltäter bei der Geschwindigkeit ist das umkopieren des Images - hat jemand Lust mir da etwas schnelleres zu coden?

Code: Alles auswählen

Procedure makeNewImage()
  
  Image2=CreateImage( #PB_Any,bildw-1,bildh)
  FirstElement(Path())
  ;-Debug
  If bildh<>ListSize(Path())
    Debug "listsize: "
    Debug ListSize(Path())
    Debug bildh
  EndIf
  ;------
  
  flag=0
  
  For y=0 To bildh-1
      For x=0 To  bildw-1
        
      If Path()\x <> x
        StartDrawing(ImageOutput(Image0))
      
          Pixel=Point(x, y)
        StopDrawing()
        StartDrawing(ImageOutput(Image2))
      
          Plot(x-flag, y,Pixel)
        StopDrawing()
      Else
        flag=1
      EndIf  
        
      
    
    Next x
    NextElement(Path())
    flag=0
  Next y
  FreeImage(Image0)
  Image0=Image2
  Global bildw=bildw-1
EndProcedure

Verfasst: 07.07.2009 22:06
von Fluid Byte
Ich meinte den vollständigen Code. Das obige Beispiel lässt sich nicht kompilieren. Und wo sind die Fehlermeldungen vom Debugger?

Verfasst: 07.07.2009 22:19
von spider84
irgendwie willst du es wohl nicht verstehen - die fehlermeldungen waren folge der probleme mit dem laptop. da stand z.B. "Fehler in Zeile 1" obwohl die ersten 5 Zeilen Kommentare waren. außerdem wurden die icon's in windows so angezeigt als könnten sie nicht gefunden werden - es war ein OS-weites Problem!!!

Der Code-Abschnitt sollte verdeutlichen welcher Codeabschnitt am meisten Zeit kostet. Den ganzen Code werde ich jetzt aus 2 Gründen nicht posten: 1. ist er in einer art, dass er ein schlechtes Licht auf mich werfen könnte, 2. habe ich da heute sehr viel Zeit hereininvestiert - und mein erster Gedanke dabei war nicht ein OpenSource-Projekt zu starten. Möglicherweise veröffentliche ich später den Source. Aber vlt siehst du ja den Link oben, da ist eine kompilierte exe - die sollte sogar unter Wine laufen.

Verfasst: 07.07.2009 22:43
von HeX0R
Also:
Man sieht an deiner Prozedur tatsächlich, dass die erbärmlich langsam sein dürfte, und durchaus Potential für Performancezuwachs haben sollte.

Aber:
Überlege dir das folgende Szenario:
-Ein API-Crack liest sich das hier durch.
-Er sieht vermutlich sofort, dass die Prozedur so wie sie ist suboptimal ist.
-Er würde dir gerne helfen und einen Teil seiner Zeit für dich opfern.
-Er hat weder Zeit noch Lust, die Prozedur erst mal minutenlang zu hinterfragen, um endlich ein lauffähiges Beispiel fertig zu haben, mit dem er dann an der Performanceschraube drehen kann.
-Also wird er einfach entnervt zum nächsten ungelesenen Beitrag übergehen und du hast Pech gehabt.

Keiner will deinen kompletten Source sehen, um damit reich zu werden.
Alles was hier (zurecht) erwartet wird, ist ein Teil deiner Zeit, ein lauffähiges Beispiel an dem man herumschrauben kann anzubieten, damit man einen Teil seiner Zeit investieren kann, um dir zu helfen.

Das kann nicht zuviel verlangt sein.

Verfasst: 08.07.2009 00:02
von spider84
/:->
hmm, ich wollte das Thema "kompletter Source" jetzt eigentlich nicht weiter vertiefen.

ich glaube auch nicht, dass es wirklich darum geht. im studium lernt man als erstes probleme in teilprobleme zu zerlegen. und das teilproblem, welches nicht optimal läuft hat vermutlich jeder verstanden. es lässt sich ja auch ganz ohne code so erklären, dass es glasklar ist:

Es gibt 2 Images: Ein Source mit dem geladenen Bild und ein Target, dass um 1 Pixel in der Breite schmaler ist (es ist ja ein verkleinerungs-algo). In einer zusätzlichen LinkedList steht für jede Zeile, welches Pixel im Target-Image weggelassen wird. Alle anderen Pixel sollen kopiert werden.
Die Standard-Vorgehensweisen führen über Point() und Plot() wobei für jedes Image jeweils StartDrawing(ImgSource bzw. ImgTarget) aufgerufen werden muss -> langsam.

vlt schreibe ich nach meinen klausuren (in 3 wochen) mal einen Code um dieses Teilproblem herum um es zu einem Programm zu komplettieren... :freak:
vermutlich habe ich aber bis dahin die Ratschläge der API-Leute aus dem Chat verwirklicht und verstanden wie SetDIBits funzen soll bzw. eine UserLib genutzt. Ich würde den Vorgang halt gern erleichtern/beschleunigen und mir über alle Optionen bewusst werden.

Verfasst: 08.07.2009 00:36
von Fluid Byte
es lässt sich ja auch ganz ohne code so erklären, dass es glasklar ist:
Deinen Studienplatz haste wohl eingeklagt oder? <)
vermutlich habe ich aber bis dahin die Ratschläge der API-Leute aus dem Chat verwirklicht und verstanden wie SetDIBits funzen soll bzw. eine UserLib genutzt.
Darauf können wir gerne wetten wenn du möchtest.

Verfasst: 08.07.2009 01:20
von spider84
CODED REALITY - HOME OF CREATIVE MINDS
-> "No pages found"

Die Kriese macht wohl auch vor der Kreativität nicht halt. Jeder spart halt wo er kann... :wink:

Verfasst: 08.07.2009 11:50
von Kaeru Gaman
"Krise" mit einfachem i.

ich denke, HeX0R hat das gut auf den Punkt gebracht.
wenn du dich schon in Bezug auf den Umgang als beratungsresistent erweist,
wer soll dann ausprobieren, wie du auf technischen Rat reagierst?

du bist doch nicht erst seit gestern hier, also weißt du doch,
dass man im Allgemeinen lauffähigen Code posten sollte...

Verfasst: 08.07.2009 12:54
von Fluid Byte
Es wirklich bemitleidenswert zu sehen wie im die Argumente ausgehen. Er hat leider nichts begriffen.
HeXOR hat geschrieben:-Also wird er einfach entnervt zum nächsten ungelesenen Beitrag übergehen und du hast Pech gehabt.
Genau das passiert jetzt <)